Symfony2:路由优先级

trr*_*rrm 3 php symfony

是否有优先考虑Symfony2的路线?

我正在使用它看起来像这样的注释

控制器

//TestController.php

/**
 * @Route("/test")
 */
class TestController extends Controller
{
    /**
     * @Route("/a", name="test_a")
     */
   .....

//DummyController.php
/**
 * @Route("/")
 */
class DummyController extends Controller
{
    /**
      * @Route("/{varA}/{varB}", name="dummy_one")
      */
   .....
Run Code Online (Sandbox Code Playgroud)

配置

//routing.yml

acme_bundle:
    resource: "@Acme/Controller"
    type:     annotation
Run Code Online (Sandbox Code Playgroud)

目标

URL      , Actual              , Goal
/test/a  , DummyController     , TestController  //Wrong
/test/b  , DummyController     , DummyController //Good
Run Code Online (Sandbox Code Playgroud)

我如何强制TestController首先进行测试?

谢谢

Der*_*k F 8

从您的示例中我可以假设您的虚拟和测试控制器位于同一个包中,如果是这种情况,那么您只需在routing.yml中单独列出该包中的控制器.您列出的顺序是他们将被检查的顺序.

acme_test:
    resource: "@Acme/Controller/TestController.php"
    type:     annotation

acme_dummy:
    resource: "@Acme/Controller/DummyController.php"
    type:     annotation
Run Code Online (Sandbox Code Playgroud)

如果它们位于不同的包中,则首先列出包含测试控制器的包.

有关详细信息,请参阅symfony路由文档. http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/routing.html#activation


trr*_*rrm 5

因此,Symfony将按字母顺序使用控制器,并逐个添加路由.

如果不使用另一个捆绑包,那么目前无法增加优先级 currently version 2.5

如果您正在寻找高级路由,https://github.com/symfony-cmf/Routing是一个很棒的捆绑.