Symfony 注解路由顺序
Symfony annotation routing order
我目前在 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
来自 BarController
和 app_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.yaml
与 config/routes.yaml
的目的,因为两者都可以包含任何类型的路线...我错过了什么?
没关系,我找到了解决方案。我只是想念这样一个事实,即当我定义 app_controllers
时我覆盖了我的特定 app_foo_controller
路由,解决方案是像这样定义每个控制器:
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
我目前在 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
来自 BarController
和 app_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.yaml
与 config/routes.yaml
的目的,因为两者都可以包含任何类型的路线...我错过了什么?
没关系,我找到了解决方案。我只是想念这样一个事实,即当我定义 app_controllers
时我覆盖了我的特定 app_foo_controller
路由,解决方案是像这样定义每个控制器:
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