Symfony4 "object not found by the @ParamConverter annotation" 404 错误
Symfony4 "object not found by the @ParamConverter annotation" 404 error
我发现 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 时,它 returns 给我一个 404 错误 :
App\Entity\Description @ParamConverter 注释未找到对象
经过数小时的寻找解决方案,我终于阅读了 https://symfony.com/doc/current/routing.html 并了解到 /blog/{id} 注释赶上 /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 并且“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,
]);
}
我发现 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 时,它 returns 给我一个 404 错误 :
App\Entity\Description @ParamConverter 注释未找到对象
经过数小时的寻找解决方案,我终于阅读了 https://symfony.com/doc/current/routing.html 并了解到 /blog/{id} 注释赶上 /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 并且“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,
]);
}