41

Symfony のフォームビルダーで遊んでいますが、ラベルを表示しない方法が見つかりません。さらに、実際に各入力ボックスにプレースホルダーを設定することに興味があります。これは可能ですか?私は少し調べましたが、何も見つかりませんでした。

私のフォーム:

<form action="{{ path('searchPeople') }}" method="post" class="form-inline">
    {{ form_errors(form) }}
    
    {{ form_row(form.first_name) }}
    {{ form_row(form.last_name) }}
    
    {{ form_rest(form) }}
    
    <br />
    <button type="submit" class="btn btn-primary" /><i class="icon-search"></i>Search</button>
</form>
4

12 に答える 12

61

すでに回答されていることは知っていますが、小枝テンプレートで何も変更したくない場合は、プレースホルダーの別のソリューションを探している人に役立つかもしれません:

$builder->add(
    'name',
    'text', 
     array(
        'attr' => array(
             'placeholder' => 'Your name',
        ),
        'label' => false,
     )
);
于 2014-10-07T16:29:15.323 に答える
20

form_rest を使用してフィールドを出力する場合は、フォーム ビルダーでフィールドのラベルを false に設定する必要があります。

$builder->add('first_name', 'text', array(
    'label' => false,
));

フィールドを個別に出力する場合、twig テンプレートでそのフィールドの form_label を省略するか、空の文字列に設定できます。

{{ form_label(form.first_name, '') }}
于 2013-06-07T22:11:21.033 に答える
6

ラベルをプレースホルダーに変換

{% use 'form_div_layout.html.twig' with widget_attributes as base_widget_attributes %}
{% block widget_attributes %}
    {% set attr = {'placeholder': label|trans({}, translation_domain)} %}
    {{- block('base_widget_attributes') -}}
{% endblock widget_attributes %}
于 2014-08-20T15:42:57.037 に答える
3

最近やった!:) form_row 用と form_widget 用の新しいフィールド テンプレートを作成する必要があります。次に、form_label 部分を削除し、プレースホルダーを追加します。

http://symfony.com/doc/current/cookbook/form/form_customization.html

フィールドごとに行うことも、すべてに設定することもできます。

または、form_row テンプレートからの form_label の削除をスキップして、現在 form_row() を呼び出している場所で form_widget() を実行することもできます。

于 2013-06-07T22:11:14.887 に答える
3

このラベルの質問に出くわした他の人のために:フォームテーマを使用して、必要なすべてのフォームの form_row タグをオーバーライドできます。ただし、ページ リーダーの最適化のために非表示に設定することをお勧めします。ブートストラップを使用した私の例:

{% block form_row %}
    {% spaceless %}
            {{ form_label(form, null, {'label_attr': {'class': 'sr-only'}}) }}
            {{ form_errors(form) }}
            {{ form_widget(form) }}
    {% endspaceless %}
{% endblock form_row %}

フォームテーマを config.yml とテンプレートに含めることを忘れないでください。

于 2014-07-06T14:24:28.887 に答える
3

を使用していないform_row場合は、入力をビルダーに追加するときに、いつでもプレースホルダーを属性として直接追加できます。そのようです:

$task = new Task();
$form = $this->createFormBuilder($task)
            ->add('first_name', 'text', array(
                      'required' => true,
                      'trim' => true,
                      'attr' => array('placeholder' => 'Lorem Ipsum')
        )->getForm();
于 2016-03-23T17:51:51.507 に答える
2

レオの答えを拡張する:

{% use 'form_div_layout.html.twig' %}
{% block widget_attributes %}
{% spaceless %}
    {% set attr = attr|merge({'placeholder': label}) %}
    {{ parent() }}
{% endspaceless %}
{% endblock widget_attributes %}

transfilter は親に含まれているため、削除されました。

于 2014-09-15T10:08:14.640 に答える
1

フォームを手動でレンダリングする必要があります。

次に例を示します。

<form id="form-message" action="{{ path('home') }}" method="post" {{ form_enctype(form) }}>
  {{ form_label(form.name) }}
  {% if form_errors(form.name) %}
    <div class="alert alert-error">
      {{ form_errors(form.name) }}
    </div>
  {% endif %}
  {{ form_widget(form.name) }}
  {{ form_row(form._token) }}
  <input type="submit" class="btn" value="Submit">
</form>

関連ドキュメント

于 2013-06-07T22:13:22.990 に答える