我的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){
....
}
建议表示赞赏。