是否可以在单个定义中定义同一 Controller 的多个路由?
例如:
我想要一个单一的定义
/, /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
最佳答案
如果您没有为路线注释声明名称,symfony 会生成一个。 (“使用 @Route 注解定义的路由会被赋予一个由包名称、 Controller 名称和操作名称组成的默认名称。”来自 http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html)
通过声明多个路由,symfony 会生成一个名称(如果您不精确地指定您的名称),她可能会通过保留第一个来覆盖您的其他路由。
您可以尝试通过为注释中的每条路线随机命名来进行测试。
最后一件事是不要忘记您的根路由文件,通过添加指向您的包的链接(如文档中的示例)。
blog:
resource: "@SensioBlogBundle/Controller"
type: annotation
关于Symfony2 单 Controller 多路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17836318/