解释symfony2注释的工作原理

时间:2014-07-02 02:09:03

标签: php .htaccess symfony redirect

我正在使用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年的所有评论

这是执行此功能的错误方法吗?

1 个答案:

答案 0 :(得分:1)

/**
* @Route("/reviews/{date}", name="reviewsDate", defaults={"date" = null})
* @Template()
*/

这是与

相同的路线
/**
* @Route("/reviews", name="reviews")
* @Template()
*/

因为null参数的默认值为date,所以如果你重定向到reviews,你将会reviewDate没有导致无限循环的参数。