将class属性添加到symfony表单构建器行div

时间:2014-09-08 07:34:22

标签: css forms symfony attributes abstract

这是我的AbstractType代码:

   $builder->add('email', 'email', array('label' => 'form.email', 'translation_domain' => 'FOSUserBundle'))

上面生成的代码:

    <form class="fos_user_registration_register form-horizontal" role="form" method="POST" action="/app_dev.php/register/">

<div id="fos_user_registration_form">
 <div>
   <label class="required" for="fos_user_registration_form_email">Email: </label>
   <input id="fos_user_registration_form_email" type="email" required="required" name="fos_user_registration_form[email]">
 </div>
</div>

</form>
</div>

我的问题是如何将类属性添加到行div成为:

<div class="form-group">
    <label class="required" for="fos_user_registration_form_email">Email: </label>
    <input id="fos_user_registration_form_email" type="email" required="required" name="fos_user_registration_form[email]">
</div>

4 个答案:

答案 0 :(得分:3)

对我来说,skler的答案不是解决方案,因为它将类添加到输入电子邮件中,而不是div。

编辑:

更好的解决方案

{% for child in form.children|keys %}
    <div class="login_field">
        {% if 'token' not in form_label(attribute(form.children,child)) %}
            {{form_label(attribute(form.children,child)) }}
        {% endif %}
        {{form_widget(attribute(form.children,child)) }}
    </div>
    <br/>
{% endfor %}

结果:

<div class="registration_field">
    <label>e-mail</label>
    <input type="email">
</div>

删除未使用的div和令牌标签,我们可以使用.registration_field选择器代替.registration_field&gt;格

对于Amstell: 我回答了skler的解决方案,说对我来说这不是解决方案, 对不起,目前尚不清楚。

答案 1 :(得分:3)

Symfony2 / Twig有一个很棒的表单渲染引擎;完全覆盖它是一种浪费。作为一个更优雅的选择,我们可以利用内置的表单主题。根据文件:

  

Symfony附带四个内置表单主题,用于定义呈现表单每个部分所需的每个片段

我们可以覆盖默认主题并创建自己的主题。这允许我们覆盖form_row块,并将我们自己的可爱属性添加到周围的div。只需将其放在一个文件中,例如: views / forms / fields.twig

{% block form_row %}

    <div class="form-group">
        {{ form_label(form) }}
        {{ form_errors(form) }}
        {{ form_widget(form) }}
    </div>

{% endblock %}

我们不需要担心其他声明,因为Symfony只会重载已更改的内容。

我们现在可以从页面模板中引用它。将form替换为传递给模板的表单变量的名称:

{% form_theme form 'forms/fields.twig' %}

当然,您可以自由添加声明来获取表单属性,而不是硬编码类名。

(资料来源:http://symfony.com/doc/2.7/cookbook/form/form_customization.html

答案 2 :(得分:2)

按照以下行添加到 app / config / config.yml 中:

twig:
    form:
       resources: ['bootstrap_3_layout.html.twig']

twig:
    form_themes:
        - "bootstrap_3_layout.html.twig"

http://symfony.com/blog/new-in-symfony-2-6-bootstrap-form-theme

答案 3 :(得分:-1)

这个问题与this其他问题非常相似,只是你应该使用:

{{ form_start(form), {'attr': {'class': 'form-group'}} }}

另一种解决方案是在Form \ Type类中定义它:

$builder->add('email', 'email', array(
        'label' => 'form.email',
        'translation_domain' => 'FOSUserBundle',
        'attr' => array('class' => 'form-group'),
        'label_attr' => array('class' => 'if-you-want-also-style-attr-label'),
    ));