Symfony 2 - 在路由表达式中使用自定义服务
Symfony 2 - Using custom service in routing expression
目前,我正在尝试实现一些通往 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" returns 正确,所以这条路线匹配
给定 URL 路径:/germany/aldi
- 尝试匹配路线 1
- "isCategory" returns false,所以我们跳过这条路线
- 尝试匹配路线 2
- "isMerchant" returns true,所以这条路由匹配,我们执行 MerchantController
给定 URL 路径:/germany/this-does-not-match-anything
- 尝试匹配路线 1
- "isCategory" returns false,所以我们跳过这条路线
- 尝试匹配路线 2
- "isMerchant" returns false,所以我们跳过这条路线
- ...现在我们可以在没有路由匹配时执行默认行为
我想,条件完全符合我的要求,但我只有 requestContext 和表达式语言的请求,没有服务容器。
有人知道我如何将服务容器注入表达式语言以用于路由目的或可能有助于解决此问题的其他方法吗?
提前致谢:-)
有两个这样的变量很麻烦。根据经验,最佳做法是用静态值将这两者分开,如下所示:
route_category:
pattern: /{location}/category/{category}
route_merchant:
pattern: /{location}/merchant/{merchant}
否则,正如 David Kmenta 所说,您将编写额外的代码来试图弄清楚什么是什么。
问问自己,这种类型的编码是否值得在您的网址中少一个额外的词?
除此之外,想想您的用户:如果您的商家听起来像一个类别,他们会知道其中的区别,还是您所采用的方案只会让他们感到困惑。
目前,我正在尝试实现一些通往 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" returns 正确,所以这条路线匹配
给定 URL 路径:/germany/aldi
- 尝试匹配路线 1
- "isCategory" returns false,所以我们跳过这条路线
- 尝试匹配路线 2
- "isMerchant" returns true,所以这条路由匹配,我们执行 MerchantController
给定 URL 路径:/germany/this-does-not-match-anything
- 尝试匹配路线 1
- "isCategory" returns false,所以我们跳过这条路线
- 尝试匹配路线 2
- "isMerchant" returns false,所以我们跳过这条路线
- ...现在我们可以在没有路由匹配时执行默认行为
我想,条件完全符合我的要求,但我只有 requestContext 和表达式语言的请求,没有服务容器。
有人知道我如何将服务容器注入表达式语言以用于路由目的或可能有助于解决此问题的其他方法吗?
提前致谢:-)
有两个这样的变量很麻烦。根据经验,最佳做法是用静态值将这两者分开,如下所示:
route_category:
pattern: /{location}/category/{category}
route_merchant:
pattern: /{location}/merchant/{merchant}
否则,正如 David Kmenta 所说,您将编写额外的代码来试图弄清楚什么是什么。
问问自己,这种类型的编码是否值得在您的网址中少一个额外的词?
除此之外,想想您的用户:如果您的商家听起来像一个类别,他们会知道其中的区别,还是您所采用的方案只会让他们感到困惑。