4

交換したい:

{{ form_errors(form.name) }}
{{ form_widget(form.name, { 'attr': {'placeholder': 'Nom'} }) }}

に:

{{ form.name|field('Nom') }}

どうすればそれができますか?Twig 拡張機能で実行しようとしましたが、form_widget 関数にアクセスできません。

編集form.nameプロパティ(親フォームを含む)でそれを行うことができましたが、symfonyコードを繰り返すことになり、非常に醜い大きなハックになります

4

1 に答える 1

2

attr をフォームクラスに移動するように依頼すると、より理にかなっています。

class SomeForm extends AbstractType {
      //.....
      $builder->add('name', 'text', array('attr' => array('placeholder'=>'Nom')));
}

一部のフィールドにはカスタムレンダリングが必要だと思うので、確認できます:

http://symfony.com/doc/2.0/cookbook/form/form_customization.html#how-to-customize-an-individual-field

ここで説明するように、新しいタイプを作成してカスタマイズすることもできます。

http://symfony.com/doc/2.0/cookbook/form/form_customization.html#what-are-form-themes

デフォルトのレンダリング方法を変更し、フィールドのラベル文字列を使用してデフォルトでプレースホルダー タグをレンダリングするように symfony に依頼することもできます (フォーム テーマをグローバルに有効にする方法の詳細は、上記のリンクで説明されています)。

{% block text_widget %}
    {% set type = type|default('text') %}
    <input type="text" {{ block('widget_attributes') }} value="{{ value }}" />
{% endblock field_widget %}

{% block widget_attributes %}
  {% spaceless %}
    {% for attrname,attrvalue in attr %}{{attrname}}="{{attrvalue}}" {% endfor %} placeholder="{{ label|trans }}"
  {% endspaceless %}
{% endblock widget_attributes %}

{% block form_row %}
  {% spaceless %}
    <div class="my-class">
        {{ form_errors(form) }}
        {{ form_widget(form) }}
    </div>
  {% endspaceless %}
{% endblock form_row %}

そのため、symfony が提供するテーマを使用して form_row(form.name) に制限します。Symfony のアプローチは、私には「非常に」DRY/DIE に見えます。それが役に立てば幸い。

于 2013-02-25T10:54:44.460 に答える