10

我一直在尝试覆盖 form_row Twig 扩展,以便可以呈现 Twitter Bootstrap 样式的行。一个 twitter boostrap 表单行应该如下所示:

<div class="control-group">
    <label class="control-label" for="idOfMainInput">Label Name:</label>
    <div class="controls">
        <input type="text" id="idOfMainInput" name="someDumbName">
    </div>
</div>

基本树枝 div 样式 form_row 块在此链接中定义如下:

{% block form_row %}
{% spaceless %}
    <div>
        {{ form_label(form) }}
        {{ form_errors(form) }}
        {{ form_widget(form) }}
    </div>
{% endspaceless %}
{% endblock form_row %}

因此,我的想法是只放入必要的 div,并在必要时对类条目(即在主 div 中)进行硬编码,但将“attr”值传递给 form_label、form_errors 和 form_widget 部分。我现在已经取出了 form_errors,只是为了不深入研究它。这是我尝试过的:

{% form_theme form _self %}
{% block form_row %}
{% spaceless %}
<div class="control-group">
    {{ form_label(form, 'test label name', { 'attr': {'class': 'control-label'} }) }}
    <div class="controls">
    {{ form_widget(form) }}
    {{ form_errors(form) }}
    </div>
</div>
{% endspaceless %}
{% endblock form_row %}

但是,问题在于,无论我尝试什么,form_label 扩展都不使用“控制标签”作为我的类(如果有现有的,它应该根据源代码附加它,比如“必需”)。这是我查看渲染页面的源时得到的结果:

<div class="control-group">
    <label for="form_rsa_id" class="required">test label name</label>
    <div class="controls">
        <input type="number" id="form_rsa_id" name="form[rsa_id]" required="required" />
    </div>
</div>

正如您所看到的,class="required" 在那里并且取自基本表单对象属性,但它应该是 class="required control-label",但它不是。

有点不知所措,因为文档(以及源代码)指出应该使用符号“form_label(视图,标签,变量)”。链接到此处的文档。

4

2 回答 2

14

我认为你需要使用label_attr而不是attr.

于 2013-04-01T14:52:55.117 回答
1

对于仍然希望这样做的任何人,Symfony 2.6 附带了一个Bootstrap 表单主题,它将为您执行此操作。

于 2015-06-20T12:08:13.877 回答