Symfony4“@ParamConverter 注释找不到对象”404 错误
Posted
技术标签:
【中文标题】Symfony4“@ParamConverter 注释找不到对象”404 错误【英文标题】:Symfony4 "object not found by the @ParamConverter annotation" 404 error 【发布时间】:2019-01-02 10:23:24 【问题描述】:我发现 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 注释找不到对象 em>
【问题讨论】:
简单安装即可:``` composer require annotations ``` 【参考方案1】:经过几个小时寻找解决方案,我终于阅读了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 提到的解决方案是唯一具有多个实体和控制器的解决方案!
【讨论】:
它可以帮助使用 php bin/console debug:router 或 php bin/console router:match如果您向路线添加要求,则顺序无关紧要。
例如。
/**
* @Route("/blog/id", name="blog_show", requirements="id":"\d+")
*/
要求是一个正则表达式。
【讨论】:
【参考方案3】:在您的情况下,您有相同的方法,即 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“@ParamConverter 注释找不到对象”404 错误的主要内容,如果未能解决你的问题,请参考以下文章
从 $_POST 请求(不是来自 URL)使用 ParamConverter