我使用的是symfony2注释,想知道级联在这种格式下是如何工作的。
假设我有:
/**
* @Route("/reviews/{slug}", name="reviewDetail")
* @Template()
*/
首先,然后我检查它是否提取了任何数据。如果没有,我使用以下重定向重定向到以下控制器:
return $this->redirect($this->generateUrl('reviewsDate', array('date' => $slug)), 301);
应该转到:
/**
* @Route("/reviews/{date}", name="reviewsDate", defaults={"date" = null})
* @Template()
*/
然后检查它是否提取了任何数据,如果没有,则使用重定向创建一个回退:
/**
* @Route("/reviews", name="reviews")
* @Template()
*/
当我运行重定向时:
if ($ctx->getReview($slug)) {
$review = $ctx->getReview($slug);
} else {
return $this->redirect($this->generateUrl('reviewsDate', array('date' => $slug)), 301);
}
我得到这个错误:
This webpage has a redirect loop
这些动作都是按照接受的顺序排列的,所以我会先检查鼻涕虫,然后检查日期,如果没有结果,就把它踢到主评论页面。
我可以将路线更改为更具体的路线,这是可行的,但它似乎不那么用户友好。例如,如果我想拥有以下多条路线:
评论/我的评论:显示具体的评论评论/2014:显示2014年的所有评论
这是执行此功能的错误方式吗?
/**
* @Route("/reviews/{date}", name="reviewsDate", defaults={"date" = null})
* @Template()
*/
这是与相同的路线
/**
* @Route("/reviews", name="reviews")
* @Template()
*/
因为date
参数有默认值null
,所以如果重定向到reviews
,则转到reviewDate
时没有导致无休止循环的参数。