如何一次定义复杂的正则表达式并在多个路由中重用它们
How to define complex regular expressions once and reuse them in multiple routes
在我的 Symfony5.1 应用程序中,有很多使用正则表达式的路由,例如:
/**
* @Route("/foo/{page<^[1-9][0-9]*$>}", name="foo", methods="GET")
*/
public function list(int $page = 1): Response
{
// ...
}
route documentation表示可以使用容器参数:
Route requirements (and route paths too) can include container parameters, which is useful to define complex regular expressions once and reuse them in multiple routes.
我在 services.yaml
文件中创建了一个参数:
parameters:
page: '<^[1-9][0-9]*$>'
但是如何在路由注释中调用上述参数?
我试过没有成功:
@Route("/foo/{page<page>}", name="foo", methods="GET")
@Route("/foo/{page}", name="foo", methods="GET", requirements=env:page)
@Route("/foo/{page}", name="foo", methods="GET", requirements={"page"=page})
@Route("/foo/{page}", name="foo", methods="GET", requirements={"page"=parameter:page})
@Route("/dogs/{page<%env(page)%>}", name="dogs", methods="GET")
@Route("/foo/{page}", name="foo", methods="GET", requirements={"page"=%env(page)%})
最后两个没有返回 404 错误,但是:在路由配置中不允许使用“%env(page)%”。
如何在路由注解中调用我的参数?
您的控制器:
/**
* @Route("/foo/{page<%page%>}", name="foo", methods="GET")
*/
public function list(int $page = 1): Response
{
// ...
}
parameters.yaml
parameters:
page: '^[1-9][0-9]*$' # Without `<` and `>`
在我的 Symfony5.1 应用程序中,有很多使用正则表达式的路由,例如:
/**
* @Route("/foo/{page<^[1-9][0-9]*$>}", name="foo", methods="GET")
*/
public function list(int $page = 1): Response
{
// ...
}
route documentation表示可以使用容器参数:
Route requirements (and route paths too) can include container parameters, which is useful to define complex regular expressions once and reuse them in multiple routes.
我在 services.yaml
文件中创建了一个参数:
parameters:
page: '<^[1-9][0-9]*$>'
但是如何在路由注释中调用上述参数?
我试过没有成功:
@Route("/foo/{page<page>}", name="foo", methods="GET")
@Route("/foo/{page}", name="foo", methods="GET", requirements=env:page)
@Route("/foo/{page}", name="foo", methods="GET", requirements={"page"=page})
@Route("/foo/{page}", name="foo", methods="GET", requirements={"page"=parameter:page})
@Route("/dogs/{page<%env(page)%>}", name="dogs", methods="GET")
@Route("/foo/{page}", name="foo", methods="GET", requirements={"page"=%env(page)%})
最后两个没有返回 404 错误,但是:在路由配置中不允许使用“%env(page)%”。
如何在路由注解中调用我的参数?
您的控制器:
/**
* @Route("/foo/{page<%page%>}", name="foo", methods="GET")
*/
public function list(int $page = 1): Response
{
// ...
}
parameters.yaml
parameters:
page: '^[1-9][0-9]*$' # Without `<` and `>`