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 (用你的路径替换 ,在我的示例中为“/about”【参考方案2】:

如果您向路线添加要求,则顺序无关紧要。

例如。

/**
 * @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

@ParamConverter 注解找不到实体对象

Symfony4 - 'app/config/config.yml' 不见了?

Symfony4 使用 crud 生成 API 休息

Symfony4 使用外部类库作为服务

Symfony4 学说单元测试:实体在缓存中有旧数据?