在一些 symfony2 项目中,我有下一个路由定义:
MyBundle_Default:
resource: "routing/default.yml"
prefix: /{slug}-{resource_id}
requirements:
slug: "[a-z\-]+"
resource_id: "\d+"
但是这个要求行不通。
例如,如果我在 slug 中包含“-”(例如“test-route”),则像 /test-route-9
这样的 url 不起作用。
这是一个错误吗?
最佳答案
主要是,我认为您的问题来自破折号字符。让我解释。假设输入的 url 是 /test-route-9
。根据您的要求,匹配的 slug 将是 test-route-
因为您的正则表达式指出 a-z
或破折号 -
之间的字符可以是匹配。
正则表达式将匹配它能匹配的所有内容,因此它会“吃掉”破折号字符。通过“吃掉”它,其余部分将只有 9
,这是不正确的,因为路由在匹配 resource_id
部分之前需要另一个破折号。因此,该网址不会如您所期望的那样匹配。
简单的修复方法是使用 /
而不是破折号来分隔组件,或者更改分隔 slug 的字符以将其与 url 组件分隔符区分开来。
通过更改网址中的分隔符进行修复:
prefix: /{slug}/{resource_id}
requirements:
slug: "[a-z\-]+"
resource_id: "\d+"
或者:
prefix: /{slug}_{resource_id}
requirements:
slug: "[a-z\-]+"
resource_id: "\d+"
通过直接更改 slug 的分隔符来修复:
prefix: /{slug}-{resource_id}
requirements:
slug: "[a-z_]+"
resource_id: "\d+"
我很确定问题出在于此。没有测试任何内容,但值得一试,以确保问题出在破折号字符分隔符上。
关于resources - Symfony2 中的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622048/