Symfony4 "object not found by the @ParamConverter annotation" 404 错误



我发现Symfony4有类似的博客示例,如中所述https://symfony.com/doc/current/routing.html然后我添加了一个新的路线来添加/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错误:
App\Entity\Description对象未被@ParamConverter注释找到

经过数小时的寻找解决方案,我终于阅读了https://symfony.com/doc/current/routing.html并理解/blogg/{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提到的解决方案是唯一一个具有多个实体和控制器的解决方案

如果在路由中添加了一个需求,那么顺序就无关紧要了。

例如。

/**
* @Route("/blog/{id}", name="blog_show", requirements={"id":"d+"})
*/

要求是正则表达式。

在您的案例中,您有相同的方法,即GET

因此,第一个到达的路径是/blog/about和">关于";被解释为ID,但事实并非如此!

因此,解决这一问题的最简单方法是切换功能顺序:

/**
* @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,
]);
}

最新更新