21

Symfonyアプリケーションの特定の入力要素またはラベル要素にクラスを追加したい。

Twigレベルのフォームでこのようなことを行うことができます。

<div class="row">
    {{ form_label(form.subject) }}
    {{ form_widget(form.subject, { 'attr': {'class': 'c4'} }) }}
</div>

これは正常に機能します。ただし、すべてのフォームのテンプレート全体を手動で設定して書き出す必要があります。そして私は実際に使用したい:

{{ form_widget(form) }}

FormTypeだから、私はどうすればラベルまたは入力用のCSSクラスを:のどこかに追加できるかと考えていました。

class SystemNotificationType extends AbstractType {
    public function buildForm(FormBuilder $builder, array $options) {
        $builder->add('subject', 'text', array(
            'label' => 'Subject'
        ));

フォーム全体を1か所で構成できるので、これはもっと便利かもしれないと思います。

これはどのように行うことができますか?多分私はそれについて間違った方法で考えています。

4

3 に答える 3

49

次のように実行できます。

class SystemNotificationType extends AbstractType {
    public function buildForm(FormBuilder $builder, array $options) {
        $builder->add('subject', 'text', array( 
            'label'  => 'Subject',
            'attr'   =>  array(
                'class'   => 'c4')
            )
        );
    }
}
于 2012-06-14T15:47:38.953 に答える
32

フィールドのクラスはアプリケーションのプレゼンテーション レイヤーの一部であるため、フォームの小枝テーマを作成することをお勧めします。

バンドルのファイルfields.html.twigを作成し、フォーム行のフォーマット方法を定義します。次に例を示します。Resources/views/Form

{% block field_row %}
<div class="row">
    {{ form_errors(form) }}
    {{ form_label(form) }}
    {{ form_widget(form, { 'attr': {'class': 'c4'} }) }}
</div>
{% endblock field_row %}

fieldNameformのフィールドなど、特定のフィールドのみをカスタマイズする場合はformName、行をカスタマイズします。

{% block _formName_fieldName_row %}
<div class="row">
    {{ form_label(form) }}
    {{ form_errors(form) }}
    {{ form_widget(form, { 'attr': {'class': 'c4'} }) }}
</div>
{% endblock %}

EDIT : フィールドのみをカスタマイズします。

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

次に、必要なすべてのフォーム テンプレートで、このテーマを使用して追加します。

{% form_theme form 'MyBundle:Form:fields.html.twig' %}

これはクックブックで詳しく説明されています

于 2012-06-16T14:23:03.673 に答える