Symfony4“ @ParamConverter批注未找到对象” 404错误

时间:2018-07-25 14:36:58

标签: symfony4

我发现类似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对象

3 个答案:

答案 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,
    ]);
}