1

我正在使用 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)
{ ... }

调用网址

[root_path]/en/x/y/z

导致(如预期)方法参数设置为

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

这正是我想要的。

现在我配置了 FOSUserBundle 并且为了让捆绑路由工作,我在路由定义中添加了一个要求,即如果 cat_1 设置为“登录”或“注销”,则不触发路由:

/**
 * @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 = ''

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

任何想法都受到高度赞赏。

4

1 回答 1

1

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

Symfony 文档

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

requirements={"cat_1": "^(?!login|logout)[^\/]+"})
于 2017-11-23T18:01:23.497 回答