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

时间:2011-10-09 22:10:36

标签: regex symfony routing routes

我的路线(slug包含短划线!):

region:
  pattern: /regione/{slug}-{id}
  defaults: { _controller: SWAItaliaInCifreBundle:Default:region }

在Twig模板中:

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

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

  

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

3 个答案:

答案 0 :(得分:16)

默认情况下禁止斜杠。您可以通过更改默认要求来启用它们。在你的情况下,给出id的要求也很好,因为它用短划线分开。

见下面的例子。

region:
    pattern: /regione/{slug}-{id}
    defaults:
        _controller: SWAItaliaInCifreBundle:Default:region
    requirements:
        slug: "[a-zA-Z1-9\-_\/]+"
        id: "\d+"

答案 1 :(得分:5)

这个正则表达式对我有用。 (Michael建议的{id}要求)

region:
  pattern: /regione/{slug}-{id}
  defaults: { _controller: SWAItaliaInCifreBundle:Default:region }
  requirements:
    slug: "[a-zA-Z0-9-_/]+"
    id: "\d+"

答案 2 :(得分:1)

如果您尝试这样做会产生如下错误:

An exception has been thrown during the rendering of a template ("Parameter "slug" for route "routing_whatever" must match "[a-zA-Z0-9-_/]+" ("Topics/Virtualization Security" given).") in ...
http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html中查看

你必须使用:

slug:“。+”