Symfony2如何允许在路由正则表达式中使用短划线?

gre*_*emo 15 regex routing routes symfony

我的路线(slug包含破折号!):

region:
  pattern: /regione/{slug}-{id}
  defaults: { _controller: SWAItaliaInCifreBundle:Default:region }
Run Code Online (Sandbox Code Playgroud)

在Twig模板中:

{% for r in regions %}
    <a href='{{ path('region', { 'slug':r.slug, 'id':r.id }) }}'>{{ r.name }}</a>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我收到关于正则表达式匹配的错误.问题:为什么Symfony2不允许在URL中使用破折号?如何指定我的路线包含短划线(并且它完全没问题)?

在渲染模板期间抛出异常("参数"slug"for route"区域"必须匹配"[^/ - ] +?"(给出"valle-d-aosta-vallee-d-aoste"). ")

Jak*_*las 17

默认情况下禁止斜杠.您可以通过更改默认要求来启用它们.在你的情况下,提供id的要求也很好,因为它用破折号分隔.

见下面的例子.

region:
    pattern: /regione/{slug}-{id}
    defaults:
        _controller: SWAItaliaInCifreBundle:Default:region
    requirements:
        slug: "[a-zA-Z1-9\-_\/]+"
        id: "\d+"
Run Code Online (Sandbox Code Playgroud)


NEO*_*ine 6

这个正则表达式适合我.(Michael提出的{id}要求)

region:
  pattern: /regione/{slug}-{id}
  defaults: { _controller: SWAItaliaInCifreBundle:Default:region }
  requirements:
    slug: "[a-zA-Z0-9-_/]+"
    id: "\d+"
Run Code Online (Sandbox Code Playgroud)