如何自定义DIV和TABLE表单小部件而不重复symfony

时间:2016-02-29 22:08:19

标签: forms twig symfony

尝试自定义Symfony表单呈现,我在config.yml中有以下内容

twig:
    form_themes:
        - 'form/fields.html.twig'

form/fields.html.twig包含自定义数字小部件:

{%- block number_widget -%}
    <input type="text" {{ block('widget_attributes') }} value="{{ value|filter }}" />
{%- endblock number_widget -%}

只要我使用默认表单布局(div),一切正常。但是,如果我希望表单具有表格布局,我尝试在模板中添加这样的内容:

{% form_theme 'form_table_layout.html.twig' %}

表单显示为表格,但我的自定义number_widget不再自定义!

我也尝试过:

{% form_theme 'my_cystom_theme.html.twig' %}

my_cystom_theme.html.twig包含:

{% use 'form_table_layout.html.twig' %}

没有帮助。

问题:

有没有办法在不重复代码的情况下为div和表格布局表单进行应用程序范围的自定义工作?

1 个答案:

答案 0 :(得分:0)

解决方案是使用具有多个“使用”块的自定义tempalte:

  1. 创建自定义表格布局表单,例如form/table_layout.html.twig,例如:

    {# original table layout template #}
    {% use 'form_table_layout.html.twig' %}
    
    {# our custom field widgets #}
    {% use 'form/fields.html.twig' %}
    
    {# define more custom widgets for table layout here #}
    
  2. 为了使用我们的自定义小部件呈现表格布局表单,请在模板中使用它:

    {# form_theme 'form/table_layout.html.twig' #}
    
  3. 对div布局执行相同操作。来自form/fields.html.twig的自定义小部件将在表格和div布局中使用,而不会复制代码。