php - Symfony 2 - 在路由表达式中使用自定义服务

标签 php symfony routing

目前,我正在尝试实现一些通往 symfony 2.5 的路线,这导致我遇到了一个小问题。我需要一个具有相同路由的 url 方案,具体取决于自定义服务。

route_category:
    pattern: /{location}/{category}
    defaults: { _controller: LocationBundle:Category:index }
    condition: "service('location_category_service').isCategory(request.get('category')) == true"

route_merchant:
    pattern: /{location}/{merchant}
    defaults: { _controller: LocationBundle:Merchant:index }
    condition: "service('location_merchant_service').isMerchant(request.get('merchant')) == true"

我希望 symfony 做的是:

给定的 URL 路径:/germany/restaurants

  • 尝试匹配路线1
  • “isCategory”返回true,所以这条路由匹配

给定的 URL 路径:/germany/aldi

  • 尝试匹配路线1
  • “isCategory”返回 false,所以我们跳过这条路线
  • 尝试匹配路线2
  • “isMerchant”返回 true,所以这条路由匹配,我们执行 MerchantController

给定的 URL 路径:/germany/this-does-not-match-anything

  • 尝试匹配路线1
  • “isCategory”返回 false,所以我们跳过这条路线
  • 尝试匹配路线2
  • “isMerchant”返回 false,所以我们跳过这条路线
  • ...现在我们可以在没有路由匹配时执行默认行为

我想,条件完全符合我的要求,但我只有 requestContext 和表达式语言的请求,没有服务容器。

有谁知道,我如何将服务容器注入(inject)表达式语言以用于路由目的或可能有助于解决此问题的其他方法?

提前致谢:-)

最佳答案

像这样有两个变量很麻烦。根据经验,最佳做法是使用静态值将这两者分开,如下所示:

route_category:
    pattern: /{location}/category/{category}

route_merchant:
    pattern: /{location}/merchant/{merchant}

否则,正如 David Kmenta 所说,您将编写额外的代码来试图弄清楚什么是什么。

问问自己,这种类型的编码是否值得在您的网址中少一个额外的词?

除此之外,想想您的用户:如果您的商家听起来像一个类别,他们会知道其中的区别,还是您所采用的方案只会让他们感到困惑。

关于php - Symfony 2 - 在路由表达式中使用自定义服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29278700/

相关文章:

php - MySQL 在 WHERE 语句中按位返回奇数结果

php - 如何在 Symfony 2 中获取当前路线?

angular - 多个 canActivate 守卫在第一次失败时全部运行

c# - ASP.NET MVC 5 中的路由可选参数

php - Yii - 从 URL 中删除模块的默认 Controller ID

javascript - JSON 解析 - 内存依赖?

symfony - 表单的 View 数据应该是 MyEntity 的实例,但却是 ArrayCollection 的实例

node.js - Express:顶级路径的可选斜杠

php - 如何添加编号或项目符号?

php - 使用 symfony2 和学说得到 "cannot refresh user"错误