我想渲染表单小部件。这是我想要生成的原始HTML:
<input type="email" class="input-long" placeholder="Enter Email" name="email" id="email" required="required">
使用此:
{{ form_row(form.email, { 'type' : 'email', 'attr' : { 'class' : 'input-long', 'placeholder': "Enter Email", 'name': "email", 'id':"email", 'required': "required"}}) }}
未生成所需的输出(例如,输入类型为“text”)。
如何自定义表单窗口小部件以指定输入类型,占位符等?
更新
这是我的表单类:
class ContactType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('fist_name')
->add('last_name')
->add('email')
->add('token')
->add('is_validated')
->add('created_at')
->add('updated_at')
->add('promotion')
->add('refferer')
;
}
public function getName()
{
return 'acme_contactlistbundle_contacttype';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Acme\ContactlistBundle\Entity\Contact',
);
}
}
{{ form.email }}
呈现:
<label for="acme_contactlistbundle_contacttype_email" class=" required">Email</label><input id="acme_contactlistbundle_contacttype_email" name="acme_contactlistbundle_contacttype[email]" required="required" type="text">
当表单构建时将小部件电子邮件添加为add->('email','email')
它呈现了这个:
<label for="acme_contactlistbundle_contacttype_email" class=" required">Email</label><input id="acme_contactlistbundle_contacttype_email" name="acme_contactlistbundle_contacttype[email]" required="required" type="email">
但是,我不希望标签呈现出来(它弄乱了我精心布置的页面!)。
最后,我厌倦了并使用了这个丑陋的hackery ...(fobj是从控制器动作传入的表单对象):
答案 0 :(得分:1)
如果您对表单呈现的要求与Symfony2提供的要求不同,那么您可以定义自己的小部件。只需扩展表单主题并重新定义所需的块:
{% form_theme form _self %}
{% block field_widget %}
{% set type = type|default('text') %}
<input type="{{ type }}" {{ block('widget_attributes') }} value="{{ value }}" />
{% endblock field_widget %}
当然,请检查documentation on form theming
<强>更新强>
如果您只想在不<input>
的情况下呈现<label>
代码,那么您应该以下一种方式重新定义字段小部件:
{% block _contact_email_row %}
<div>
{{ form_errors(form) }}
{{ form_widget(form) }}
</div>
{% endblock %}
_contact
适用于您的Type
名称
_email
用于字段名称。