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">

しかし、私はラベルをレンダリングしたくありません (慎重にレイアウトされたページを台無しにしています!)。

結局、私はうんざりして、この醜いハッカーを使用しました... (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 に答える