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

给定 URL 路径:/germany/aldi

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

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

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

提前致谢:-)

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

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

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

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

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

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