【问题标题】:Symfony 2 RoutingSymfony 2 路由
【发布时间】:2014-05-29 12:26:31
【问题描述】:

我的项目中的路由有问题。

我有 2 个控制器,一个是

Domestos\TranslatingBundle\ProjectController.php

p

第二个是

Domestos\TranslatingBundle\LanguageController.php

我还设置了带有注释的路由。

routing.yml:

# import routes from a controller directory
translation:
    resource: "@DomestosTranslatingBundle/Controller/"
    type:     annotation

ProjectController 工作得很好,路由器工作得很好。

问题是,我的 LanguageController 无法正常工作。控制器应该没问题,但总是当我用注释中预定义的路由调用 URL 时,它会抛出错误

找不到“GET /language/”的路由 404 Not Found - NotFoundHttpException 1 链接异常:

ResourceNotFoundException »

LanguageController.php 看起来像这样:

<?php

namespace Domestos\TranslatingBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Domestos\TranslatingBundle\Entity\Language;

class LanguageController extends Controller
{
    /**
     * @Route("/language")
     * @Template()
     */
    public function indexAction()
    {
        $languages = $this->getDoctrine()->getRepository('DomestosTranslatingBundle:Language')->findAll();

        return $this->render('DomestosTranslatingBundle:Language:index.html.twig', array(
            'languages' => $languages,
            ));
    }

    /**
     * @Route("/language//add")
     * @Template()
     */
    public function addAction()
    {
        $language = new Language();

        $language->setTitle('Jazyk')
                 ->setCode('Skratka');
        $form = $this->createFormBuilder($language)
                ->add('title', 'text')
                ->add('code', 'text')
                ->add('save', 'submit')
                ->getForm();

        $form->handleRequest($request);

        if($form->isSubmitted())
        {
            $em = $this->getDoctrine()->getManager();
            $em->persist($language);
            $em->flush();
        }

        return $this->render('DomestosTranslatingBundle:Language:add.html.twig', array(
            'form' => $form->createView(),
            )); 
    }

    /**
     * @Route("/language/edit/{id}")
     * @Template()
     */
    public function editAction($id)
    {
        $language = $this->getDoctrine->getRepository('DomestosTranslatingBundle:Language')->find($id);

        $form = $this->createFormBuilder($language)
                ->add('title', 'text')
                ->add('code', 'text')
                ->add('save', 'submit')
                ->getForm();

        $form->handleRequest($request);

        if($form->isSubmitted())
        {
            $em = $this->getDoctrine()->getManager();
            $em->persist($language);
            $em->flush();
        }

        return $this->render('DomestosTranslatingBundle:Language:edit.html.twig', array(
            'form' => $form->createView(),
            )); 
    }

    /**
     * @Route("/language/delete/{id}")
     * @Template()
     */
    public function deleteAction($id)
    {
        $language = $this->getDoctrine->getRepository('DomestosTranslatingBundle:Language')->find($id);
        $em = $this->getDoctrine()->getManager();
        $em->remove($language);
        $em->flush();

        return new Response('Language deleted: ' . $language->getCode());
    }

}

问题是,为什么这个控制器不工作?我需要完成项目,这真的很烦人。

【问题讨论】:

  • 双斜线@Route("/language//add")?
  • 工作。谢谢。没有意识到错字...

标签: php symfony routing


【解决方案1】:

好的,试试

/**
 * @Route("/language")
 */
class LanguageController extends Controller
{
    /**
     * @Route("/")
     * @Template()
     */
    public function indexAction()
    {
        // ...
    }

    /**
     * @Route("/add")
     * @Template()
     */
    public function addAction()
    {
        // ...
    }
    // And so on
}

【讨论】:

    【解决方案2】:

    尝试去掉尾部的斜线:

    resource: "@DomestosTranslatingBundle/Controller/"
    

    成为:

    resource: "@DomestosTranslatingBundle/Controller"
    

    如:here

    如果这不起作用,请尝试运行:

    php app/console router:debug
    

    查看所有路线...

    【讨论】:

      【解决方案3】:

      修改这个

      translation:
          resource: "@DomestosTranslatingBundle/Controller/"
          type:     annotation
      

      在

      translation:
          resource: "@DomestosTranslatingBundle/Controller/LanguageController.php"
          type:     annotation
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多