0

我现在正在关注 symblog 教程,使用 Symfony 2.2.2

2.3 有一些重大变化,所以我使用 2.2 来获取有关已弃用函数的信息。但问题是:

创建评论表单后,我收到一条错误消息,提示找不到 GET 评论的路由:新控制器。

这似乎是 Twig 中的更新,以前可以使用以下代码:

{% render 'BloggerBlogBundle:Comment:new' with { 'blog_id': blog.id } %}

您现在必须使用:

{% render controller('BloggerBlogBundle:Comment:new') with { 'blog_id': blog.id } %}

之后,我收到另一个错误,说明如下:

控制器 "Blogger\BlogBu​​ndle\Controller\CommentController::newAction()" 要求您为 "$blog_id" 参数提供一个值(因为没有默认值或者因为在此参数之后有一个非可选参数)。

据我所知,with { 'blog_id': blog.id }应该传递这个论点。但事实并非如此。

本教程的评论很广泛,但没有提到这一点。而且我对 twig 和 symfony 不是很熟悉,我不知道在哪里寻找问题。

编辑:要清楚,我是从一个已经存在的树枝文件中调用这个控制器函数,而不是从 PHP 文件中。没有为它定义路由。然后该操作将调用另一个 twig 文件以将表单元素包含到页面中。本教程解释了这是为了使表单可以在站点的各个部分重复使用,从而无需制作大量的表单元素,这些元素基本上都做同样的事情。

4

2 回答 2

3

根据文档

要包含控制器,您需要使用绝对 url 引用它:

{# app/Resources/views/base.html.twig #}

{# ... #}
<div id="sidebar">
    {% render url('latest_articles', { 'max': 3 }) %}
</div>

从 Symfony 2.0.20/2.1.5 开始,Twig 渲染标签现在采用绝对 url 而不是控制器逻辑路径。这修复了官方博客上报告的一个重要安全问题 (CVE-2012-6431)。如果您的应用程序使用旧版本的 Symfony 或仍然使用以前的渲染标签语法,您应该尽快升级。

在路由文件中找到 BloggerBlogBu​​ndle:Comment:new 操作的 url,并使用上面的语法。这应该有效。

于 2013-06-18T17:52:24.987 回答
1

根据您应该使用的 symfony 文档

{{ render(controller('BloggerBlogBundle:Comment:new', { 'blog_id': blog.id })) }}
于 2013-06-18T17:51:32.387 回答