Symfony2单个控制器的多个路由

时间:2013-07-24 14:04:15

标签: symfony routing definition

是否可以在单个定义中定义同一控制器的多个路径?

例如:

我想要

的单一定义
/, /about, /privacy-policy

使用

之类的东西
_home:    
    pattern:   {/ , /about, /privacy-policy}  
    defaults:  { _controller: AcmeDemoBundle:Home:index, about, privacy_policy }

我不想按照建议的here在单独的定义中定义多个路由。

编辑:这是我的源代码:

<?php

namespace Acme\DemoBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class HomeController extends Controller
{
    /**
     * @Route("/")
     */
    public function indexAction()
    {
        /*
         * The action's view can be rendered using render() method
         * or @Template annotation as demonstrated in DemoController.
         *
         */
        return $this->render('AcmeDemoBundle:Home:home.html.tpl');
    }
    /**
     * @Route("/about")
     */
    public function aboutAction()
    {
        return $this->render('AcmeDemoBundle:Home:about.html.tpl');
    }    
}

这是routing.yml的源代码

_home:
    pattern:  /
    defaults: { _controller: AcmeDemoBundle:Home:index }
_welcome:
    pattern:  /
    defaults: { _controller: AcmeDemoBundle:Welcome:index }
_demo_secured:
    resource: "@AcmeDemoBundle/Controller/SecuredController.php"
    type:     annotation

_demo:
    resource: "@AcmeDemoBundle/Controller/DemoController.php"
    type:     annotation
    prefix:   /demo

2 个答案:

答案 0 :(得分:4)

如果您没有为路线注释声明注释symfony生成一个。 (“使用@Route注释定义的路由被赋予由包名称,控制器名称和操作名称组成的默认名称。”来自http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html

通过声明多个路由symfony生成一个名称(如果你不精确的名字),巫婆可能会通过保留第一个来覆盖你的其他路线。

您可以尝试通过为注释中的每个路线创建一个随机名称进行测试。

最后一件事是不要忘记你的根路由文件,只需在文档中添加一个链接到你的软件包。

blog:
    resource: "@SensioBlogBundle/Controller"
    type:     annotation 

答案 1 :(得分:2)

[语义错误]方法Debril \ RssAtomBundle \ Controller \ YOURController :: indexAction()中的注释“@Template”从未导入过。您是否忘记为此注释添加“使用”语句?

必须在YOURController中添加两个用途:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;