如果表单是在控制器上的渲染调用中定义的,我正在尝试在树枝模板上呈现表单。像这样:
{% 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 %}