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 に見えます。それが役に立てば幸い。