2011-10-09 37 views
13

我的路线(塞包含破折号!):Symfony2如何让路线正则表达式中的破折号?

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

在枝杈模板:

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

我收到一条错误正则表达式匹配。 问题:为什么Symfony2不允许在URL中破折号?我怎样才能指定我的路线包含破折号(它完全正常)?

例外,有一个模板 (“参数‘金属块’路由‘区域’必须匹配‘[^/- ]的呈现期间被扔?+’ (”山谷-d-奥斯塔-河谷-d-aoste“))

回答

16

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

请参阅下面的示例。

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

允许一个尾部斜线在模式的末尾添加一个'/'。例如模式:/ regione/{slug} - {id}/- 然后没有正则表达式需要 – Michael

+0

需要下面的答案是正确的。这个配置有错误的结构和符号 – coviex

+0

@coviex这是一个旧的答案/符号。更新了我的答案。 –

5

这个正则表达式适合我。 ({ID}要求由迈克尔的建议)

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

为了使它完成,你可以添加要求:id:\ d + – Michael

1

如果你尝试这样它会抛出这样的错误:为观看在http://symfony.com/doc/current/cookbook/routing/slash_in_parameter.html 必须使用

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 ... 

毛坯: “。+”

相关问题