web-dev-qa-db-ja.com

symfony2のフォームクラスでラベルを非表示にするにはどうすればよいですか?

フォームをtwigに分割し、特定のフィールドのラベルをレンダリングしないことを選択できることを知っていますが、私はあなたがこれを行うことができなければならないと思いますフォームクラス。options配列の「label」キーを使用すると、この値を任意に変更できますが、falseまたは空の文字列を渡すと、フィールド名が返されます(「ロール」がラベルとしてレンダリングされる例を参照)。

$builder
            ->add('roles', 'entity', array(
                'class' => 'Acme\UserBundle\Entity\Role',
                'label' => '' 
            ));

$builder
            ->add('roles', 'entity', array(
                'class' => 'Acme\UserBundle\Entity\Role',
                'label' => false 
            ));

奇妙なことに、空のスペース(非常に汚れているように感じる)を渡すと、ソースを表示してもスペースがない、完全に空のラベルがレンダリングされるようです。誰もが最善のアプローチに光を当てることができますか、空のスペースがうまくいくように見えるのですか?

40
Mark

Symfony 2.2以降では、<label>false属性のlabel値を使用したレンダリング:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('Name', null, array('label' => false))
    ;
}

ソース

95
cheesemacfly

「表示」仕様を「モデル」とは別にしてください

あなたが言う受け入れられた答えに従うなら:

_$builder
        ->add('Name', null, array('label' => false))
    ;
_

フォームは再利用できません。特に、フォームが複数の場所に表示される場合(または将来表示される可能性がある場合)。

フォームラベルをレンダリングしたくない場合は、Twig(Twigを使用すると仮定)でレンダリングするのが最善です。

{{ form_row(form.name) }}をレンダリングする代わりに、各要素を個別にレンダリングし、_form_label_を除外します

例.

_{{ form_errors(form.name) }}
 {# {{ form_label(form.name) }} <-- just dont include this #} 
{{ form_widget(form.name) }}
_

将来、フォームの1つのインスタンスでラベルを使用し、他のインスタンスでは使用しない場合は、{{ form_label(form.name) }}を追加するだけで十分です。 array('label' => true)を変更すると、どこでもラベルがオンになります

1つのライナー{{ form(form) }}を使用してフォームをレンダリングする場合は、 symfony docs をご覧ください。

15
Chris

Form'row()に{'label':false}を追加するだけです

{{ form_row(form.name, {'label':false}) }}
4
PrestonDocks

ラベルを非表示にするには、ラベルではなくフィールドのウィジェットのみをレンダリングする必要がありました。

{{ form_widget(edit_form.event) }}
{{ form_rest(edit_form) }}

スペースを含む ''ラベルの問題は、そこにあるHTML入力をレンダリングし、ページに影響することです。

3
jmoz

これは動作するはずです(ただし、あまりきれいなソリューションではありません)

$builder
        ->add('roles', 'entity', array(
            'class' => 'Acme\UserBundle\Entity\Role',
            'label' => ' ' 
        ));

(ティック間のスペースに注意してください)

2
philipphoffmann

私はあなたの質問をあまりよく理解していませんが、ラベルの名前を示す形で、個人的に私はそれを好きです:

  $builder
        ->add('role', 'text')

in my twig:

    <tr>
        <td>{{ form_widget(form.role) }} </td>
        <td>{{ form_label(form.role, "Name of Label") }}</td>
    </tr>
    <tr>
        <td>{{ form_errors(form.role) }}</td>
    </tr>
2
Nll