我发现类似https://symfony.com/doc/current/routing.html中描述的类似博客示例的Symfony4 然后,我添加了一条新路线来添加/ blog / about页面。因此,我的 src / Controller / BlogController.php 中的一部分代码是:
/**
* @Route("/blog/{id}", name="blog_show")
*/
public function show(Description $article) {
return $this->render('blog/show.html.twig', [
'article' => $article,
]);
}
/**
* @Route("blog/about", name="about")
*/
public function about() {
return $this->render('blog/about.html.twig', [
'copyright' => "GLPI 3",
]);
}
当我运行locahost:8000 / blog / about时,它返回404错误: @ParamConverter批注找不到 App \ Entity \ Description对象
答案 0 :(得分:4)
经过几个小时的寻找解决方案,我终于阅读了https://symfony.com/doc/current/routing.html,并了解到 / blog / {id} 注释 catch / blog / about 路线,但无法使用!
通过在我的控制器文件中切换功能顺序:
/**
* @Route("/blog/about", name="blog_about")
*/
public function about() {
return $this->render('blog/about.html.twig', [
'copyright' => "GLPI 3",
]);
}
/**
* @Route("/blog/{id}", name="blog_show")
*/
public function show(Description $article) {
return $this->render('blog/show.html.twig', [
'article' => $article,
]);
}
工作正常!
@tom提到的解决方案是唯一具有多个实体和控制器的解决方案!
答案 1 :(得分:2)
如果您向路线添加要求,则顺序无关紧要。
例如
/**
* @Route("/blog/{id}", name="blog_show", requirements={"id":"\d+"})
*/
要求是一个正则表达式。
答案 2 :(得分:0)
在您的情况下,您有相同的方法,即 GET
因此,第一个到达的路径是/blog/about,而“about”被解释为ID,但事实并非如此!< /p>
所以解决这个问题最简单的方法是切换函数顺序:
/**
* @Route("/blog/about", name="blog_about")
*/
public function about() {
return $this->render('blog/about.html.twig', [
'copyright' => "GLPI 3",
]);
}
/**
* @Route("/blog/{id}", name="blog_show")
*/
public function show(Description $article) {
return $this->render('blog/show.html.twig', [
'article' => $article,
]);
}