2016-12-15 8 views
1

Ich habe eine Symfony3 Form-Klasse mit dem folgenden Choice Element für meine Form erstellt:Gibt es einen Grund, warum das Choice_attr in Symfony3 ChoiceType das ID-Attribut nicht festlegen kann?

->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]; 
     }, 
)) 

Dies funktioniert gut und setzt das Klassenattribut auf die Wahl Wert. Aber ich möchte stattdessen das ID-Attribut setzen.

Ich habe dies versucht:

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

Was ich erwarte nicht, aber tut zu arbeiten.

ich auch in meinem Zweig Vorlage versucht, diese:

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

Aber das stimmt nicht mit der ID entweder zuzuschreiben. Hinweis: Das obige versucht, die ID des 3. Elements in den Auswahlmöglichkeiten festzulegen, falls Sie nicht vertraut sind.

Dies scheint ein Problem mit dem Symfony3-Code zu sein, der dies nicht unterstützt. Kann jemand bestätigen?

Der Grund, warum ich das ID-Attribut setzen möchte, ist, weil ich in meinem Javascript getElementById nicht getElementsByClassName (die ein Array erhält) verwenden möchte.

+1

Wahrscheinlich, weil 'ID' von der Form-Klasse basierend auf dem Feldnamen festgelegt wird. Sie könnten ein 'data-' Attribut wie folgt setzen: 'return ['data-id' => $ val]', und dann ['var el = document.querySelector ('[data-id =" + the_id_you_set + "]') '] (https://jsfiddle.net/rjyjfb84/). –

+0

Danke für diese Info @JaredFarrish. Ja Einstellung 1die 'Daten-ID' funktioniert wie von Ihnen angegeben. Meine Sorge ist, dass es scheint, ein Problem mit dem [Choice_attr-Code] (https://symfony.com/doc/current/reference/forms/types/choice.html#choice-attr) zu sein. Entsprechend dieser Dokumentation sollten Sie in der Lage sein, ein Attribut für jedes Element des Auswahl-Arrays zu setzen. Ich frage mich, ob es einen Platz gibt, um einen Symfony-Bug einzureichen. Ich habe Workarounds, aber ich denke immer noch, dass es ein Bug ist. Außerdem habe ich andere Probleme gesehen. –

+2

Wenn nur Symfony github für die Quellen- und Ausgabesteuerung verwendet. Oh warte, tut es. Wie auch immer, ID funktioniert wie vorgesehen. Lassen Sie die Formularkomponente generieren Die ID ist die einzige Möglichkeit, eine eindeutige ID für verschachtelte Formulare zu garantieren. – Cerad

Antwort

Verwandte Themen