1

我目前在我的 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来自BarControllerwith app_barroute 的动作。

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

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

但这不起作用,BarController 和他的app_bar路由仍然在app_foo来自 FooController 的路由之前调用。

另外,我不明白config/routes/annotations.yamlvs的目的,config/routes.yaml因为两者都可以包含任何类型的路线......我错过了什么?

4

1 回答 1

1

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

app_controllers:
    resource: ../../src/Controller/
    type: annotation
app_foo_controller:
    resource: ../../src/Controller/FooController.php
    type: annotation
app_bar_controller:
    resource: ../../src/Controller/BarController.php
    type: annotation
于 2019-06-05T07:15:17.960 回答