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

时间:2016-01-15 08:20:52

标签: php symfony twig

如果在控制器上的渲染调用中定义了表单,我试图在树枝模板上渲染表单。类似的东西:

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

如果控制器的渲染调用包含var 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 %}导致问题。请查看以下解决方案。

谢谢,

3 个答案:

答案 0 :(得分:2)

解决。

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

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

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

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

由于

答案 1 :(得分:0)

你有没有尝试过:

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

答案 2 :(得分:0)

Twig文档说:

定义:

  

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

空:

  如果foo变量为null,false,空数组或空字符串,则

计算结果为true。

空:

  如果变量为null,则

null返回true。

所以弄清楚,你想要检查什么,取决于“form_to_be_rendered”的值。