Symfony路由参数要求限制

mor*_*ous 10 symfony1

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

鉴于路线

my_foobar_route:url:/ example/routing /:s1 /:id要求:{id:\ d +}

任何人都可以提醒我如何强制param s1成为一个字符串?

ric*_*age 14

您只需要提供合适的正则表达式:

my_foobar_route:
  url: /example/routing/:s1/:id
  requirements:
    id: \d+
    s1: "[a-zA-Z]+"
Run Code Online (Sandbox Code Playgroud)

编辑:在第二个正则表达式周围添加引号; YAML将其解释[...]为一组参数.谢谢@chiborg :-)


chi*_*org 5

如果您不关心字符串包含什么,或者如果您事先不知道它将包含什么,请尝试以下操作:

my_foobar_route:
  url: /example/routing/:s1/:id
  requirements:
    id: \d+
    s1: "[^/]+"
Run Code Online (Sandbox Code Playgroud)

这将允许除用作参数分隔符的“/”字符之外的所有字符。用表情

my_foobar_route:
  url: /example/routing/:s1/:id
  requirements:
    id: \d+
    s1: "[^/]{3,}"
Run Code Online (Sandbox Code Playgroud)

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

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