在Symfony中,您可以定义块来描述表单类型的外观。例如,可以通过创建像这样的块来重新设计ChoiceType
(用于选择,收音机,复选框)
{%- block choice_widget -%}
{%- endblock choice_widget -%}
现在,在渲染此类型的表单字段时,应该会出现一个空的HTML字符串。
好的,让我们现在回答我的问题。我创建了一个FormType
,它有一个布尔选项short
,应该描述我是否想要一个小部件或所有设置的简短配置(只有1-2个设置)。
所以,我正在做的是为我的小部件创建一个新块
{%- block my_new_widget -%}
{%- endblock my_new_widget -%}
在里面我想要这样做
{%- block my_new_widget -%}
{% if short %}
// Do my stuff here
{% else %}
{{ block('choice_widget') }}
{% endif %}
{%- endblock my_new_widget -%}
所以,为了解释:当short为false时,我只想要呈现默认的choice_widget
。
这就是问题所在。在我的choice_widget
我的第一行看起来像这样
{%- if required and placeholder is none -%}
当我现在呈现my_new_widget
时,我收到的错误是required
未定义。
只有当我告诉twig自己渲染choice_widget
块时才会发生这种情况。当我完全删除my_new_widget
并让它只渲染choice_widget
时,它可以正常工作。
在这两种情况下,choice_widget
都是def。因为当我将它添加到choice_widget
TEST {%- if required and placeholder is none -%}
TEST
获得输出。所以它似乎使用了正确的小部件,但是当我包含一个块时,所有小部件属性都会丢失。这是理想的行为吗?
答案 0 :(得分:0)
好的,似乎GitHub
https://github.com/twigphp/Twig/issues/1302
似乎要走的路是
{% with {
'collector': profile.getcollector(name),
'profiler_url': profiler_url,
'token': profile.token,
'name': name
} %}
{{ block('toolbar', template) }}
{% endwith %}