Symfony2:路由优先级

时间:2014-02-21 06:36:14

标签: 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")
      */
   .....

配置

//routing.yml

acme_bundle:
    resource: "@Acme/Controller"
    type:     annotation

目标

URL      , Actual              , Goal
/test/a  , DummyController     , TestController  //Wrong
/test/b  , DummyController     , DummyController //Good

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

由于

3 个答案:

答案 0 :(得分:8)

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

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

acme_dummy:
    resource: "@Acme/Controller/DummyController.php"
    type:     annotation

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

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

答案 1 :(得分:5)

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

目前无法在不使用currently version 2.5

的其他捆绑包的情况下添加优先级 如果您正在寻找高级路由,

https://github.com/symfony-cmf/Routing是一个很棒的捆绑。

答案 2 :(得分:0)

您无需重新排序所有内容。只需在所需的排名中覆盖DummyController的规则。您可以通过在routing.yml末尾创建到控制器的路由来完成此操作。 所以在您的routing.yml中作为最后一行添加:

app_dummy:
    ressource: "@YourBundle/Controller/DummyController.php
    type:     annotation