【问题标题】:Symfony 3: An exception has been thrown during the renderingSymfony 3:渲染过程中抛出异常
【发布时间】:2013-08-12 09:26:24
【问题描述】:

我得到的完整错误是这个。

An exception has been thrown during the rendering of a template ("Some mandatory parameters are missing ("id") to generate a URL for route "FooBlogBundle_articles".") in "FooBlogBundle:Article:articles.html.twig".

这是处理动作的控制器:

 public function articlesAction($id)
    {
        $em = $this->getDoctrine()->getManager();
            $blog = $em->getRepository('FooBlogBundle:Blog')->find($id);

        if(!$em){
            throw $this->createNotFoundException('Unable to find blog posti');
        }

        return $this->render('FooBlogBundle:Article:articles.html.twig', ['blog'=>$blog]);
    }
}

和路由

FlickBlogBundle_articles:
    pattern:  /foo/{id}
    defaults: { _controller: FooBlogBundle:Article:articles }
    requirements:
      _method: GET
      id: \d+

Twig 和数据库,完全正常,没有类型或问题。但是这个错误很难发现,我哪里出错了。

编辑:包括模板:

{% extends 'FooBlogBundle::layout.html.twig' %}

{% block body %}
{{ blog.title }}<br/>
{{ blog.author }}<br/>
{{ blog.blog }}<br/>
{{ blog.tags }}<br/>
{{ blog.comments }}

{% endblock %}

上面的模板位于views/article/ 它扩展了在views/ 找到的另一个模板 这只是

{% extends 'FooBlogBundle::layout.html.twig' %}

【问题讨论】:

    标签: symfony twig


    【解决方案1】:

    FooBlogBundle:Article:articles.html.twig 模板中,您有类似{{ path(FlickBlogBundle_articles) }} 的内容(无法准确判断,因为我没有看到模板)。此路由需要附加参数id。所以改成{{ path(FlickBlogBundle_articles, {'id':article.id}) }}

    【讨论】:

    • 嗨,我会试试这个,我不知道怎么做,但我已经更新了我的问题以包含所涉及的模板
    • 可能是FooBlogBundle::layout.html.twig?搜索你生成链接的地方FlickBlogBundle_articles
    • 我正在关注本教程tutorial.symblog.co.uk/docs/doctrine-2-the-blog-model.html。并完全按照那里显示的那样制作。我找不到你提到的用于生成数据的模板的path()方法,除了菜单和表单重定向
    【解决方案2】:

    我遇到了同样的错误,在我的情况下,我忘记为我的私人外键设置公共 Getters 和 Setters:

    /**
     * @var Provider
     *
     * @ORM\ManyToOne(targetEntity="Provider")
     * @ORM\JoinColumn(name="fk_provider", referencedColumnName="id", nullable=true)
     */
    private $fkProvider;
    

    /**
     * @return Provider
     */
    public function getFkProvider()
    {
        return $this->fkProvider;
    }
    
    /**
     * @param Provider $fkProvider
     */
    public function setFkProvider($fkProvider)
    {
        $this->fkProvider = $fkProvider;
    }
    

    【讨论】: