Php Symfony2路由-一个slug两个不同的路由和条令实体
在我的Symfony2应用程序中,我有两个不同的原则实体,两个实体都有slug值,我希望根据这两个值进行路由。我使用注释。示例URL如下所示:Php Symfony2路由-一个slug两个不同的路由和条令实体,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,在我的Symfony2应用程序中,我有两个不同的原则实体,两个实体都有slug值,我希望根据这两个值进行路由。我使用注释。示例URL如下所示: 正如您可以看到的,两个URL都有一个slug,这些slug从不重叠,基于slug,我想在我的控制器中调用一个操作 如果我在这两个URL前面加上路由前缀或id,我可以区分它们,但我不想这样做;我只想留一个鼻涕虫 我可以在控制器内的单个操作中完成这项工作,首先手动检测对一个实体的匹配,如果不存在,则将其与另一个实体进行匹配。我想知道的是,是否有更好的
* @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("city", options={"mapping": {"city_slug": "slug"}})
*
*/
public function cityAction($page, City $city, $deal=null){
....
}
同一控制器内的第二个操作:
* @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("city", options={"mapping": {"city_slug": "slug"}})
*
*/
public function cityAction($page, City $city, $deal=null){
....
}
我也尝试了使用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("city", options={"mapping": {"city_slug": "slug"}})
*
*/
public function cityAction($page, City $city, $deal=null){
....
}
感谢您的建议。所有Symfony仅通过请求获取字符串
/path/slug
。在不检查db或其他数据存储的情况下,您希望它如何理解是城市还是其他?我理解,这就是为什么我想知道是否有一种方法,可能是使用正确的ParamConverter或其他方法,以防我误解。您可以添加额外的db表,带有slug、实体类型、实体id,并使前端控制器重定向到另一个实体id参数。我有一个适合我的工作解决方案,我捕获slug,并在单个action()中解释它。我想知道在Symfony中是否存在问题中所述的方法。您是否尝试使用yml进行此操作?所有Symfony仅通过请求获取字符串/path/slug
。在不检查db或其他数据存储的情况下,您希望它如何理解是城市还是其他?我理解,这就是为什么我想知道是否有一种方法,可能是使用正确的ParamConverter或其他方法,以防我误解。您可以添加额外的db表,带有slug、实体类型、实体id,并使前端控制器重定向到另一个实体id参数。我有一个适合我的工作解决方案,我捕获slug,并在单个action()中解释它。我想知道在Symfony是否存在一种问题中描述的方法。您是否尝试过使用yml?