Symfony2:如何在路由文件中为url参数生成Regex,以便生成干净的url名称


Symfony2 : how to make a Regex in routing file for url argument in order to make clean url name

我想为路由参数生成正则表达式,这是我的路由文件:

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.-]+"