如何一次定义复杂的正则表达式并在多个路由中重用它们

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]*$>'

但是如何在路由注释中调用上述参数?

我试过没有成功:

最后两个没有返回 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 `>`