【问题标题】:Explanation of how symfony2 annotations worksymfony2 注释如何工作的解释
【发布时间】:2014-07-02 02:09:02
【问题描述】:

我正在使用 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

动作都是按接受的顺序排列的,所以我会先检查蛞蝓,然后是日期,如果没有结果,就把它踢到主评论页面。

我可以将路线更改为更具体,这会起作用,但它似乎对用户不友好。例如,如果我想拥有这些多条路线:

reviews/my-review:显示具体评论 reviews/2014:显示 2014 年的所有评论

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

【问题讨论】:

    标签: php .htaccess symfony redirect


    【解决方案1】:
    /**
    * @Route("/reviews/{date}", name="reviewsDate", defaults={"date" = null})
    * @Template()
    */
    

    这是与

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

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

    【讨论】:

    • 知道了。这些级联就像在 yml 文件中路由一样正确吗?
    • 我不明白你的问题
    • 注解检查从上到下的路由,所以注解在控制器中的位置可以影响选择哪个路由。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2011-09-23
    • 2011-02-05
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多