这是我的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>
答案 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'),
));