resources - Symfony2 中的路由

标签 resources symfony routes requirements

在一些 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/

相关文章:

ruby-on-rails - Rails Restful 资源上的批量操作

php - 如何在 symfony 中使用 bcrypt 密码加密添加管理员?

php - Symfony/Doctrine - 根据现有数据库值查询日期值

javascript - React中如何在函数中调用函数(auth、路由)

wpf - 有没有办法在我的 WPF 应用程序中使用 ODTTF 字体文件?

python - 共享和非共享内存大小之间的差异

java - 从jar中获取资源

symfony - 原则 2 - 多对多关系 - 空集合

routes - 使用可选参数配置 Silex 路由

redirect - Express Node.js框架: How to re-write a URL by replacing one of the named param segments?