如何在Symfony2表单中使用TWIG引导程序模板块

时间:2015-08-10 06:37:23

标签: twitter-bootstrap symfony twig

我不知道如何使用bootstrap_3_horizo​​ntal_layout.html.twig中定义的块来保存我的表单。

到目前为止,我做到了这一点并且工作正常。

{% form_theme form 'bootstrap_3_horizontal_layout.html.twig' %}
<div class="well">
    {{ form_start(form) }}

    {{ form_errors(form) }}

    {{ form_row(form.title, {'label': 'Titre'}) }}

    {{ form_row(form.content, {'label': "Content"}) }}

 ...

    {{ form_rest(form) }}
    {{ form_end(form) }}
</div>

但如果我尝试使用。或bootstrap_3_horizo​​ntal_layout中定义的任何其他块,如

{{ textarea_widget(form.content, {'label': "Content"}) }}

它不能正常工作。

2 个答案:

答案 0 :(得分:2)

您在第一个示例(form_startform_errors等)中调用的函数是在使用中的Twig扩展名(documentation)中定义的函数em>定义的主题以生成输出。因此bootstrap_3_horizontal_layout.html.twig中定义的块由这些函数调用(它们是Symfony表单视图组件的扩展),您不能自己直接“调用”这些块。

如果您尝试自定义表单的输出,最简单的方法是创建自己的表单主题,该主题从基本主题扩展:

{% extends 'bootstrap_3_horizontal_layout.html.twig' %}
{% block textarea_widget %}
    {# your code #}
{% endblock %}

Symfony cookbook entry中描述了这一点。

如果您尝试直接调用窗口小部件,则最好更改传递给渲染器的窗体域的类型。可用的不同类型位于form documentation。您选择的类型定义了从主题中呈现的块 - 因此,如果您将字段类型更改为textarea,则会textarea_widget(好,textarea_row优先) 。如果您需要对此进行概述,form fragment naming文档可以为您提供帮助。

答案 1 :(得分:2)

感谢John Noel,我找到了答案。 总结一下是否有人想要做同样的事情。

在Symfony2表单中使用bootstrap3预定义布局

1 - 声明要使用的表单主题。

你的树枝模板中的

{% form_theme form 'bootstrap_3_horizontal_layout.html.twig' %}

或者/app/config/config.yml

中所有表单的全局
# Twig Configuration
twig:
    form:
        #resources: ['bootstrap_3_layout.html.twig']
        resources: ['bootstrap_3_horizontal_layout.html.twig']

2 - 使用Symfony Twig Extensions显示表单

  • 形式
  • form_start
  • form_end
  • form_enctype
  • form_widget
  • form_errors
  • form_label
  • form_row
  • form_rest

3 - 您必须在formbuilder中使用正确的Form Type(这是我缺少的部分)。

例如:使用Bootstrap 3小部件资金。

在您的form.html.twig

{% form_theme form 'bootstrap_3_horizontal_layout.html.twig' %}

  {{ form_start(form) }}

...

    {{ form_row(form.price, {'label': "Price"}) }}

...

    {{ form_end(form) }}

在您的FormType

$builder->add('price', 'money');

我希望这可以帮助别人,因为这是我希望我找到的! 再次感谢John Noel