3

我想呈现一个表单小部件。这是我要生成的原始 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"}}) }}

未生成所需的输出(例如,输入类型为“文本”)。

如何自定义呈现表单小部件以指定输入类型、占位符等?

更新

这是我的表单类:

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是从控制器动作传入的表单对象):

4

1 回答 1

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 %}

当然,检查有关表单主题的文档


更新

如果你想只呈现<input>标签而没有<label>- 那么你应该用下一种方式重新定义你的字段小部件:

{% block _contact_email_row %}
    <div>
        {{ form_errors(form) }}
        {{ form_widget(form) }}
    </div>
{% endblock %}

_contact是为了你的Type名字。
_email用于字段名称。

于 2012-08-20T06:21:34.543 回答