Symfony 3 - 路由要求 - 所有 URL-parts 在定义路由要求时映射到参数 1

Symfony 3 - route requirements - all URL-parts mapped to parameter 1 when defining a route requirement

我正在使用 Symfony 3.3.10 开发一个项目。

我用这样的 3 个参数定义了一个路由

/**
 * @Route("/{_locale}/{cat_1}/{cat_2}/{cat_3}", name="cat_site",
 *     defaults={"cat_1" = "", "cat_2" = "", "cat_3" = ""})
 */
public function catSiteAction(Request $request, $cat_1, $cat_2, $cat_3)
{ ... }

调用 URL

[root_path]/en/x/y/z

结果(如预期的那样)将方法参数设置为

cat_1 = 'x'
cat_2 = 'y'
cat_3 = 'z'

这正是我想要的。

现在我配置了 FOSUserBundle 并且为了使捆绑路由正常工作,我在路由定义中添加了一个要求,以便在 cat_1 设置为 'login' 或 'logout' 时不触发该路由:

/**
 * @Route("/{_locale}/{cat_1}/{cat_2}/{cat_3}", name="standard_site",
 *     defaults={"cat_1" = "", "cat_2" = "", "cat_3" = ""},
 *     requirements={"cat_1": "^(?!login|logout).+"})
 */
public function catSiteAction(Request $request, $cat_1, $cat_2, $cat_3)
{ ... }

调用与之前相同的url时

[root_path]/en/x/y/z

这导致参数设置如下:

cat_1 = 'x/y/z'
cat_2 = ''
cat_3 = ''

显然这不是我想要的参数,我完全不知道为什么会这样。我在需求定义或使用的正则表达式中看不到任何可能导致此问题的内容。

非常感谢任何想法。

问题是您正在修改默认正则表达式:[^/]+ cat_1 参数:

Symfony doc

尝试以下路线,不允许 / 出现(已编辑):

requirements={"cat_1": "^(?!login|logout)[^\/]+"})