Symfony2/Twig:有条件渲染时出错


Symfony2/Twig: Error on conditionally render

如果表单是在控制器上的渲染调用中定义的,我正在尝试在树枝模板上呈现表单。像这样:

{% if form_to_be_rendered is defined %}
   {{ form(form_to_be_rendered) }}
{% endif }

如果控制器的渲染调用包含 var of form_to_be_rendered,则一切运行良好,表单呈现。但是,如果我尝试在没有此参数的情况下呈现模板,Twig 会抛出一个RuntimeError,指示未定义form_to_be_rendered变量。

Variable "form_to_be_rendered" does not exist in BundleName:Path/to/template:template.html.twig at line 3
500 Internal Server Error - Twig_Error_Runtime

我尝试将其作为空值传递并is not null检查条件,但它也失败了。

我把这个转储放在模板上:

{% dump reset_password_form is defined %}

当我不传递任何参数来渲染函数时,它被评估为false

编辑

我忘了发布条件块内有一个{% block content %}导致问题。请查看下面的解决方案。

谢谢

已解决。

这很奇怪,也是我的错,因为我没有在 OP 上发布完整的代码。

{% if form is defined %}
    {% block content%}
        {{ form(form)}}
    {% end block %}
{% endif %}

条件块内部有一个 Twig 尝试渲染的{% block content %},即使条件被评估为 false。如果我用内容块包围条件块,问题就解决了。

{% block content%}
    {% if form is defined %}
        {{ form(form)}}
    {% endif %}
{% end block %}

谢谢

Twig 文档说:

定义:

定义

检查变量是否在当前上下文中定义。

空:

如果 foo 变量为空、假、空数组或空字符串,则计算结果为 true。

零:

如果变量为 null,则返回 true。

因此,弄清楚您到底要检查什么,具体取决于"form_to_be_rendered"可以具有的值。

你试过吗:

{% if form_to_be_renderer|length %}
    {{ form(form_to_be_renderer) }}
{% endif %}