为什么Symfony路线中的正则表达式没有正面预测?

时间:2014-06-09 11:58:46

标签: regex symfony

/en(?=/)demo/ regexp模式必须与/en/demo/ URI匹配,但在Symfony路由中不起作用。

路线的完整示例代码是:

demo:
    pattern:  /{_locale}demo/
    defaults: { _controller: BWMainBundle:Demo:index }
    requirements:
        _locale: 'en(?=/)'

为什么在Symfony 2中regexp正面预测不起作用?

1 个答案:

答案 0 :(得分:3)

Symfony不允许在需求中使用外观:https://github.com/symfony/symfony/issues/10548原因是只有“{_locale}”的部分与正则表达式匹配,而不是与其周围的所有内容匹配。

我也想知道为什么你会这样想?如果您需要可选的locale参数,则应创建2个路由并将它们绑定到同一个控制器:

demo_multilang:
    pattern:  /{_locale}/demo/
    defaults: { _controller: BWMainBundle:Demo:index }
    requirements:
        _locale: 'en'

demo:
    pattern:  /demo/
    defaults: { _controller: BWMainBundle:Demo:index, _locale: en }
    requirements:
        _locale: 'en'

这将在最终实施https://github.com/symfony/symfony/issues/5424时解决。