Symfony2路由 - 一个slug两个不同的路由和Doctrine实体

时间:2016-03-27 14:22:25

标签: php symfony doctrine-orm

我的Symfony2应用程序中有两个不同的Doctrine实体,两个实体都有slug值,我想根据它来完成路由。我使用Annotations。示例网址如下:

正如你可以看到两个网址都有一个slug,这些slugs永远不会重叠,基于我想在我的控制器中调用一个动作提供的slug。

如果我在前面加上路由前缀或ID,我可以区分这两个URL,但我不想这样做;我只想保留单个slu ..

我可以在控制器内部的单个操作中完成此操作,我将首先手动检测与一个实体的匹配,如果它不匹配则再次与其他实体匹配。我想知道是否有更好的方法,比如有不同的路由参数(我尝试使用@ParamConverter而没有运气)。

这是我现在拥有的代码,它永远不会进入第二个动作(),第一个动作总是被触发。

第一个行动:

* @Route("/{_locale}/{deal}/{city_slug}/{page}", defaults={"page"=1}, requirements={
 *    "_locale": "en|tm",
 *    "page": "\d+",
 *    "deal": "value1|value2"
 * }, name="deal_cities")
 *
 */
public function cityAction($page, $city_slug, $deal=null){
  ...
}

同一个控制器内的第二个动作:

* @Route("/{_locale}/{deal}/{item_slug}/{page}", defaults={"page"=1}, requirements={
     *    "_locale": "en|tm",
     *    "page": "\d+",
     *    "deal": "value1|value2"
     * }, name="deal_items")
     *
     */
    public function itemAction($page, $item_slug, $deal=null){
      ...
    }

我也尝试过ParamConverter,但没有运气到第二个动作:

   ...
  * @ParamConverter("city", options={"mapping": {"city_slug": "slug"}})
     *
     */
    public function cityAction($page, City $city, $deal=null){
     ....
    }

建议表示赞赏。

0 个答案:

没有答案