重定向到路线

时间:2018-10-01 15:54:31

标签: symfony annotations

我希望某些路由“存在”,但要重定向到另一条路由。

例如,这就是我对/路线所做的

/**
 * Homepage exists but redirect to projet
 *
 * @Route("/", name="homepage")
 * @Method("GET")
 */
public function indexAction() {
    return $this->redirectToRoute('projet_index');
}

/**
 * @Route("/projets/", name="projet_index")
 * @Method("GET")
 */
public function indexAction() {}

我想知道的是,这是否是最好的方法?

2 个答案:

答案 0 :(得分:3)

不,做到这一点的最佳方法很简单:

/**
 * @Route("/", name="homepage")
 * @Route("/projets/", name="projet_index")
 * @Method("GET")
 */
public function indexAction() {
    // your code here
}

答案 1 :(得分:0)

这有点题外话,但是在类似的情况下,您可以使用一个肮脏的技巧,即您想使用placeholders with requirements and default values将多个URL解析为一条路由:

/**
 * @Route("/{path<projets/|>?}", name="projet_index")
 */
public function someAction() {
    // ...
}

它的工作方式是定义一个称为“路径”的可选占位符(使用{...}语法)(尽管您可以使用其他名称)。使用<...>语法为该占位符提供要求:它可以是"projets/"或空字符串""。因此,"/""/projets/" URL都与该路由匹配,而没有其他匹配,因为它们的形式为"/{path}",且路径占位符与其要求匹配。

到目前为止,太好了。但是,我们仍然需要做一件事:使用?为它提供一个默认值,否则,诸如redirectToRoute或Twig函数path之类的方法会抱怨我们没有给他们一个所有占位符的值。请注意,您也可以使用"/{path<projets/|>?projets/}"而不是"/projets/"来设置默认值URL "/"

我知道这并不是OP想要的,但我认为这可能是个有用的窍门,对OP有类似疑问的人可能会发现它有用。