解释symfony2注释的工作原理


Explanation of how symfony2 annotations work

我使用的是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时没有导致无休止循环的参数。