我的路线(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”)。“)
答案 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:“。+”