4

スタイルシート クラス属性をほとんどのフィールドに追加したいのですが、すべてではありません。

public function buildForm(FormBuilder $builder, array $options)
{
    $ビルダー
        ->add('name_short', null, array('attr' => array('class' => 'rtl')) )
        ->add('name_long')
        ->add('profile_education')
        ->add('profile_work')
        ->add('profile_political')
        ->add('ツイッター')
        ->add('フェイスブック')
        ->add('ウェブサイト')
    ;
}

array('attr' => array('class' => 'rtl'))すべてのフィールドに属性を追加するより簡単な方法はありますか?

フィールドをビルダーに追加した後、フィールドをループして属性を設定するようなものを探していました。

これに似ています (残念ながら、FormBuilder には setOption メソッドはありません):

foreach($builder->all() as $key => $value) {
    $value->setOption('attr', array('class' => 'rtl'));
}

ご指摘ありがとうございます。

4

2 に答える 2

1

これに出くわし、最近うまくいく方法を見つけたことを思い出しました。
基本的に、マージされたオプションを使用して、すべてのフィールドを削除および再追加することを繰り返します。
この例を以下に示します。

public function buildForm(FormBuilder $builder, array $options)
{
    $builder
        ->add('name_short')
        ->add('name_long')
        ->add('profile_education')
        ->add('profile_work')
        ->add('profile_political')
        ->add('twitter')
        ->add('facebook')
        ->add('website')
    ;

    $commonOptions = array('attr' => array('class' => 'rtl'));

    foreach($builder->all() as $key => $field)
    {
        $options = $field->getOptions();
        $options = array_merge_recursive($options, $commonOptions);

        $builder->remove($key);
        $builder->add($key, $field->getName(), $options);
    }    
}   
于 2014-01-13T16:41:53.900 に答える
0

これは、フォームの作成中に行うことができます。フィールド名を配列に保持するだけです。異なるフィールド タイプを割り当てる必要がある場合は、代わりに連想配列を使用します。

public function buildForm(FormBuilder $builder, array $options)
{
    $fields = array('name_short', 'profile_education', 'profile_work', 'profile_political', 'twitter', 'facebook', 'website');

    foreach ($fields as $field) {
        $builder->add($fields, null, array('attr' => array('class' => 'rtl')));
    }
}
于 2013-05-09T20:21:34.393 に答える