52

フォームを小枝で分割し、特定のフィールドのラベルをレンダリングしないことを選択できることは知っていますが、フォームクラスからこれを実行できる必要があると思わずにはいられません。オプション配列の「label」キーを使用すると、この値を任意に変更できますが、falseまたは空の文字列を渡すと、フィールド名が返されます(「roles」がラベルとしてレンダリングされる以下の例を参照してください)。

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

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

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

4

6 に答える 6

116

Symfony 2.2以降、属性の値を<label>使用してレンダリングを回避できます。falselabel

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

ソース

于 2013-03-19T02:22:20.907 に答える
18

「ビュー」の仕様を「モデル」とは別にしてください

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

$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)するとどこでもラベルがオンになりますが

ワンライナーでフォームをレンダリングしている場合は{{ form(form) }}symfonyのドキュメントをご覧ください。

于 2015-07-17T14:58:38.793 に答える
10

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

{{ form_row(form.name, {'label':false}) }}
于 2017-05-19T17:30:32.870 に答える
3

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

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

私の小枝で:

    <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>
于 2012-05-15T23:11:44.193 に答える
3

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

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

スペースが含まれている''ラベルの問題は、そこにあるhtml入力をレンダリングし、ページに影響を与えることです。

于 2012-12-19T16:50:20.410 に答える
2

これは機能するはずです(ただし、あまりクリーンなソリューションではありません)

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

(目盛りの間のスペースに注意してください)

于 2012-10-29T09:21:59.720 に答える