Symfony注解路由顺序

时间:2019-06-05 07:11:02

标签: symfony symfony4 symfony-routing symfony-4.3

我目前在Symfony4(4.3)项目中坚持使用路由。我的问题很简单,我想在控制器中使用路由注释,但是我想定义它们的顺序。

例如,如果我有两个具有以下路由的控制器:

class BarController extends AbstractController
{
    /**
     * @Route("/test/{data}", name="app_bar")
     */
    public function index($data)
    {
        // ...
        return $this->render('index.html.twig', [
            'data' => $data,
        ]);
    }
}

class FooController extends AbstractController
{
    /**
     * @Route("/test/my_value", name="app_foo")
     */
    public function index()
    {
        // ...
        return $this->render('index.html.twig', [
            'data' => 'my_value',
        ]);
    }
}

config/routes/annotations.yaml中,我定义了这样的路线

app_controllers:
    resource: ../../src/Controller/
    type: annotation

然后,如果我呼叫/test/my_value,我想重定向到FooController,因为他的index动作定义了@Route("/test/my_value", name="app_foo"),但是就像路由按字母顺序加载了index首先调用来自BarControllerapp_bar路由的操作。

所以我尝试定义以下路由:

app_foo_controller:
    resource: ../../src/Controller/FooController.php
    type: annotation
app_controllers:
    resource: ../../src/Controller/
    type: annotation

但这没用,BarController和他的app_bar路由仍然在从FooController到app_foo路由之前被调用。

而且,我不了解config/routes/annotations.yamlconfig/routes.yaml的用途,因为两者都可以包含任何类型的路线...我错过了什么?

1 个答案:

答案 0 :(得分:0)

没关系,我找到了解决方案。我只是错过了这样一个事实,即在定义Control + C时我特别覆盖了app_foo_controller路由,解决方案是这样定义每个控制器:

app_controllers