我希望某些路由“存在”,但要重定向到另一条路由。
例如,这就是我对/
路线所做的
/**
* 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() {}
我想知道的是,这是否是最好的方法?
答案 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有类似疑问的人可能会发现它有用。