我想为路由参数生成正则表达式,这是我的路由文件:
editBatiments:
path: /mypathto/edit/{name}
defaults: { _controller: MyBundle:Mycontroller:editBatiments }
requirements:
name: // put the regex here
methods: GET
此正则表达式用于删除空格、下划线和标点符号。但我想当然允许大写和小写。事实上,当我继续这条路线时,我的url看起来是这样的:
localhost/myFolder/mypathTo/edit/Name%20Of%20My%20Bâtiment
我想删除"%20"和空格,以便有一个类似这个的url:
localhost/myFolder/mypathTo/edit/NameOfMyBâtiment
我该如何进行才能拥有干净的url?
我试试这个:
#route file
editBatiments:
path: /mypathto/edit/{name}
defaults: { _controller: MyBundle:Mycontroller:editBatiments }
requirements:
name: "[a-zA-Z0-9-_'/-'s.]+"
methods: GET
但我有一个错误:
在呈现模板期间引发异常("警告:preg_match():编译失败:中的范围无效偏移量为16英寸的字符类C: ''wamp''www''MyFolder''app''cache''dev''classes.php行848")第60行的MyBundle:MyFolder:indexBatiments.html.twig。
这是indexBatiments.html.twig at line 60
:中的代码
<td>
<a href="{{ path('editBatiments', {'name': batiment.name}) }}">
<button class="btn btn-warning btn-xs">Edit</button>
</a>
</td>
当我走这条路的时候,有人可以帮我做一个海洋网址吗?
提前谢谢。
将正则表达式更改为:
name: "[a-zA-Z0-9_'/'s.-]+"
即,将未加转义的连字符保留为字符类中的最后一个字符或第一个字符。请注意,字符类中间的无标题连字符被视为范围,因此会导致出现异常。
PS:您可以将正则表达式缩短为:
name: "['w'/'s.-]+"
编辑:看起来您也在匹配unicode文本。尝试此regex
name: "[''p{L}''p{N}/''s.-]+"