在窗口小部件中调用另一个窗口小部件的块会丢失所有窗口小部件属性

时间:2017-07-13 07:11:48

标签: symfony twig

在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获得输出。所以它似乎使用了正确的小部件,但是当我包含一个块时,所有小部件属性都会丢失。这是理想的行为吗?

1 个答案:

答案 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 %}