2016-12-15 5 views
1

私は自分のフォームの次ChoiceType要素でSymfony3フォームクラスを作成しました:Symfony3 ChoiceTypeのchoice_attrがid属性を設定できない理由は何ですか?

->add('deg_certs', ChoiceType::class, array(
     'mapped' => false, 
     'expanded' => true, 
     'multiple' => true, 
     'label' => 'Degrees/Certificates received:', 
     'choices' => array(
       'BA/BS' => 'ba_bs', 
       'AA/AS' => 'aa_as', 
       'Voc. Cert.' => 'voc_cert', 
       'Other' => 'other', 
     ), 
     'choice_attr' => function($val){ 
      return ['class' => $val]; 
     }, 
)) 

これは正常に動作し、選択値にクラス属性を設定します。しかし、代わりにid属性を設定したいと思います。

私はこれを試してみた:私は仕事に期待しませんが、た

'choice_attr' => function($val){ 
    return ['id' => $val]; 
}, 

私も自分の小枝テンプレートでこの試みた:

{{ form_widget(form.deg_certs[3], 
    {'attr':{'id':'deg_other', 
    'onchange':'changeDegCertOther()', 
    'style':'float:left'}}) }} 

をしかし、それはidがどちらかの属性を設定しません。注意:上記は、あなたが気にしていない場合のために、選択肢の3番目の項目のIDを設定しようとしています。

これはこれをサポートしていないSymfony3コードの問題であるようです。誰でも確認できますか?

id属性を設定する理由は、私のJavaScriptではgetElementByIdではなくgetElementsByClassName(配列を取得)を使用したいからです。

+1

おそらく 'id'はフィールド名に基づいてFormクラスによって設定されるためです。 'return ['data-id' => $ val]'、 '' var el = document.querySelector( '[data-id = "+ the_id_you_set +"]'のように 'data- ) '](https://jsfiddle.net/rjyjfb84/)。 –

+0

その情報@ JaredFarrishありがとう。はい設定1あなたが指定したように 'data-id'は動作します。私の懸念は、[choice_attr code](https://symfony.com/doc/current/reference/forms/types/choice.html#choice-attr)の問題であるようです。そのドキュメントによれば、選択配列の任意の要素の属性を設定できるはずです。 Symfonyのバグを投稿する場所があるのだろうかと思います。私は回避策がありますが、私はまだそれがバグだと思います。プラス私は他の問題を見た。 –

+2

Symfonyだけがソースと発行の制御にgithubを使用していました。ああ待って、それはありません。とにかく、idは設計どおりに動作します。フォームコンポーネントがIDを生成することは、ネストされたフォームの一意のIDを保証する唯一の方法です。 – Cerad

答えて

関連する問題