2010-06-19 51 views
8

如何强制要求路由中的参数是字符串?Symfony路由参数要求限制

鉴于路线

my_foobar_route: 网址:/例子/路由/:S1 /:ID 要求:{ID:\ d +}

谁能提醒我如何强制PARAM S1到是一个字符串?

回答

12

你只需要提供一个合适的正则表达式:

my_foobar_route: 
    url: /example/routing/:s1/:id 
    requirements: 
    id: \d+ 
    s1: "[a-zA-Z]+" 

编辑:围绕第二个正规表达式加引号; YAML将[...]解释为一组参数。由于@chiborg :-)

+1

只有在将正则表达式放在引号中后,这才会起作用。 – chiborg 2011-05-26 08:32:50

+0

编辑,谢谢。总是忘记被解释为YAML数组的'[]',我通常在路由中使用的正则表达式总是以'\ d +';-)结尾 – richsage 2011-05-26 09:21:40

0

几乎所有通过url传递的信息都是一个字符串 - 任何要求都比这更强,你不需要做任何事情,你的参数已经是一个字符串。也许你想要一个特殊格式的字符串?

4

如果你不在乎什么字符串包含或者如果你事先不知道它会包含,请尝试以下操作:

my_foobar_route: 
    url: /example/routing/:s1/:id 
    requirements: 
    id: \d+ 
    s1: "[^/]+" 

这将允许除所有字符'/'字符,用作参数的分隔符。使用表达式

my_foobar_route: 
    url: /example/routing/:s1/:id 
    requirements: 
    id: \d+ 
    s1: "[^/]{3,}" 

您可以强制字符串长度至少为三个字符。

不要忘了把带方括号的正则表达式放在引号中!如果您忘记了它们,则路由的YAML解析器会将它们解释为数组表达式。