我正在使用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
这些行动都按照接受的顺序堆叠,所以我先检查slug,然后检查日期,如果没有结果,请将其踢到主评论页面。
我可以将路线更改为更具体,这可行,但似乎不是用户友好。例如,如果我想拥有这些多条路线:
评论/我的评论:显示具体评论 评论/ 2014:显示2014年的所有评论
这是执行此功能的错误方法吗?
答案 0 :(得分:1)
/**
* @Route("/reviews/{date}", name="reviewsDate", defaults={"date" = null})
* @Template()
*/
这是与
相同的路线/**
* @Route("/reviews", name="reviews")
* @Template()
*/
因为null
参数的默认值为date
,所以如果你重定向到reviews
,你将会reviewDate
没有导致无限循环的参数。