Symfony2:如何在路由文件中为url参数创建一个正则表达式,以便创建干净的url名称

时间:2015-03-02 10:07:55

标签: php regex symfony url routes

我想为路由参数制作一个正则表达式,这是我的路径文件:

editBatiments:
    path:     /mypathto/edit/{name}
    defaults: { _controller: MyBundle:Mycontroller:editBatiments }
    requirements:
        name: // put the regex here
    methods: GET

此正则表达式适用于删除 空格下划线,标点符号。但我想允许大写和小写当然。事实上当我继续路线时,我的网址看起来像这样:

localhost/myFolder/mypathTo/edit/Name%20Of%20My%20Bâtiment 

我想删除“%20”和空格,以便拥有这个这样的网址:

localhost/myFolder/mypathTo/edit/NameOfMyBâtiment

我如何才能获得干净的网址?

我试试这个:

#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 line 848“)in   MyBundle:MyFolder:第60行的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>

当我走这条路时,有人可以帮助我制作一个cean url吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

将正则表达式更改为:

name: "[a-zA-Z0-9_\/\s.-]+"

即。将未转义的连字符保留为字符类中的最后一个字符或第一个字符。请注意,字符类中间的未转义连字符被视为范围,因此会导致您获得的异常。

PS:您可以将正则表达式缩短为:

name: "[\w\/\s.-]+"

编辑:您似乎也在匹配unicode文本。试试这个正则表达式

name: "[\\p{L}\\p{N}/\\s.-]+"