Symfony 4 路由不匹配 - redirectToRoute 导致当前页面
Symfony 4 Route gets mismatched - redirectToRoute leads to the current page
亲爱的智能蜂巢,
我在 symfony 4 中遇到重定向问题。
当然我也找过类似的问题,但是没有找到解决方法。
我刚刚通过一些教程开始学习 Symfony 4。 (而且我喜欢它!!!)
该程序是本地 apache 服务器上的一个非常简单的博客示例(也许这很重要)。
表示列表、添加、显示
所以我的问题出在添加方法上。
添加文章(效果很好)后,我想使用 redirectToRout('article_list')。
但这并没有带我去任何地方,除了在添加页面上。
调试路由时,我可以看到正确的路由:
article_list ANY ANY ANY /article
article_delete DELETE ANY ANY /article/delete/{id}
article_add ANY ANY ANY /article/add
article_show ANY ANY ANY /article/{id}
当我手动输入这些路由时,这些路由都工作正常。
添加函数也很简单:
/**
* @Route(
* "/article/add",
* name="article_add",
* )
*/
public function add(Request $request)
{
$article = new Article();
$form = $this->createFormBuilder($article)
[...]
->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$article = $form->getData();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($article);
$entityManager->flush();
$this->redirectToRoute('article_list');
}
return $this->render('article/new.html.twig', array(
'form' => $form->createView()
));
}
以及列表函数
/**
* @Route(
* "/article",
* name="article_list",
* )
*/
public function index()
{
$articles = $this->getDoctrine()->getRepository(Article::class)->findAll();
return $this->render('article/list.html.twig', [
'articles' => $articles,
]);
}
如您所见,注释中的名称是正确的。
当我将 redirectToRoute-Method 更改为
redirectToRoute("/article");
我收到错误 "Unable to generate a URL for the named route "/article",因为这样的路线不存在。
在日志中,我看到 Matched route "article_add"
所以路由“/article”匹配到路由"article_add"。那不是,我所期望的....
所以我有种感觉,添加页面上的某些内容忽略了我的路线。
有没有人知道我看不到什么简单的问题?
谢谢!
我真的很想明白,这里出了什么问题...
您没有return重定向。这样做:
return $this->redirectToRoute('article_list');
该方法仅创建响应,您需要显式 return。
亲爱的智能蜂巢,
我在 symfony 4 中遇到重定向问题。 当然我也找过类似的问题,但是没有找到解决方法。
我刚刚通过一些教程开始学习 Symfony 4。 (而且我喜欢它!!!)
该程序是本地 apache 服务器上的一个非常简单的博客示例(也许这很重要)。 表示列表、添加、显示
所以我的问题出在添加方法上。 添加文章(效果很好)后,我想使用 redirectToRout('article_list')。 但这并没有带我去任何地方,除了在添加页面上。
调试路由时,我可以看到正确的路由:
article_list ANY ANY ANY /article
article_delete DELETE ANY ANY /article/delete/{id}
article_add ANY ANY ANY /article/add
article_show ANY ANY ANY /article/{id}
当我手动输入这些路由时,这些路由都工作正常。
添加函数也很简单:
/**
* @Route(
* "/article/add",
* name="article_add",
* )
*/
public function add(Request $request)
{
$article = new Article();
$form = $this->createFormBuilder($article)
[...]
->getForm();
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()){
$article = $form->getData();
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($article);
$entityManager->flush();
$this->redirectToRoute('article_list');
}
return $this->render('article/new.html.twig', array(
'form' => $form->createView()
));
}
以及列表函数
/**
* @Route(
* "/article",
* name="article_list",
* )
*/
public function index()
{
$articles = $this->getDoctrine()->getRepository(Article::class)->findAll();
return $this->render('article/list.html.twig', [
'articles' => $articles,
]);
}
如您所见,注释中的名称是正确的。
当我将 redirectToRoute-Method 更改为
redirectToRoute("/article");
我收到错误 "Unable to generate a URL for the named route "/article",因为这样的路线不存在。
在日志中,我看到 Matched route "article_add"
所以路由“/article”匹配到路由"article_add"。那不是,我所期望的....
所以我有种感觉,添加页面上的某些内容忽略了我的路线。
有没有人知道我看不到什么简单的问题?
谢谢! 我真的很想明白,这里出了什么问题...
您没有return重定向。这样做:
return $this->redirectToRoute('article_list');
该方法仅创建响应,您需要显式 return。