如何强制要求路由中的参数为字符串?
鉴于路线
my_foobar_route: url:/ example / routing /:s1 /:id 要求:{id:\ d +}
有谁能提醒我如何强制param s1成为一个字符串?
答案 0 :(得分:13)
您只需要提供合适的正则表达式:
my_foobar_route:
url: /example/routing/:s1/:id
requirements:
id: \d+
s1: "[a-zA-Z]+"
编辑:在第二个正则表达式周围添加了引号; YAML将[...]
解释为参数数组。谢谢@chiborg: - )
答案 1 :(得分: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解析器会将它们解释为数组表达式。
答案 2 :(得分:0)
通过url发来的任何东西都是一个字符串 - 任何要求都比这更强大,你不需要做任何事情,你的参数已经是一个字符串。也许你想要一个特殊格式的字符串?