2014-09-26 10 views
8

Ich möchte ein benutzerdefiniertes HTML-Attribut zu einer Option einer Auswahl in einem Zend Framework 2 Formular hinzufügen.ZF2 Hinzufügen eines benutzerdefinierten Attributs zur Option in einem ausgewählten Formularelement

Dies ist mein (Teil) Code von meiner Form-Klasse:

$this->add(array(
     'name' => 'lieuRemplissage', 
     'type' => 'Select', 
     'attributes' => array(
      'class'  => 'form-control', 
     ), 
     'options' => array(
      'label' => _('Lieu pré-enregistré'), 
     ), 
    )); 

ich meine Optionen Werte in meinem Controller wie folgt füllen:

$form = new \Vente\Form\Vente; 
foreach($this->getAdminLieuDeVenteTable()->fetchAll() as $lieu) { 
     $optionsLieu[$lieu->getId()] = $lieu->getNom(); 
    } 
    $form->get('lieuRemplissage')->setValueOptions($optionsLieu); 

Aber jetzt, für jede Option möchte ich Fügen Sie allen ausgewählten Optionen ein html-Attribut hinzu, jedoch mit einem jeweils anderen Wert.

Gibt es einen Weg, das in ZF2 zu erreichen?

Danke.

+0

ja es ist, können Sie die Schlüssel/Werte in den Attributen Schlüssel innerhalb valueOptions – matwr

Antwort

5

ich das gerade herausgefunden und wollte hier teilen, da ich diese Frage sah, während ich für die gleiche Frage war auf der Suche. Sollte das gleiche Ergebnis mit dem vorgeschlagenen Weg geben, aber direkt die Attribute der Optionen in der Formularklasse benutzen; besonders nützlich, wenn Sie das Datenobjekt an ein Konstrukt übergeben, um Optionen wie mich zu füllen.

$this->add(array(
    'name' => 'lieuRemplissage', 
    'type' => 'Select', 
    'attributes' => array(
     'class'  => 'form-control', 
    ), 
    'options' => array(
     'label' => _('Lieu pré-enregistré'), 
     'value' => 123 
     'attributes' => array(
      'data-key' => 'value_for_data_attribute_goes_here', 
     ), 
    ), 
)); 
10

Ja, das ist möglich mit ZF2

Sie in den Attributen Wert innerhalb der Option übergeben. Der Wert sollte im Array-Format sein:

// Beispiel im Blick:

$select=new \Zend\Form\Element\Select('test'); 
$select->setValueOptions(

    [ 

     ['attributes'=>['data-key'=>'value'],'value'=>'myValue','label'=>'myLabel'] 


    ] 

    ); 

echo $this->formselect($select); 

druckt:

<select name="test"><option value="myValue" data-key="value">myLabel</option></select> 

EDIT:

Die Attribute, die Sie Sie gültigen HTML sein müssen liefern Attribute kann keine zufälligen Schlüssel/Wert-Paare setzen. Zum Beispiel Data- * ist in Ordnung, wie die folgende sind:

protected $validGlobalAttributes = array(
     'accesskey'   => true, 
     'class'    => true, 
     'contenteditable' => true, 
     'contextmenu'  => true, 
     'dir'    => true, 
     'draggable'   => true, 
     'dropzone'   => true, 
     'hidden'    => true, 
     'id'     => true, 
     'lang'    => true, 
     'onabort'   => true, 
     'onblur'    => true, 
     'oncanplay'   => true, 
     'oncanplaythrough' => true, 
     'onchange'   => true, 
     'onclick'   => true, 
     'oncontextmenu'  => true, 
     'ondblclick'   => true, 
     'ondrag'    => true, 
     'ondragend'   => true, 
     'ondragenter'  => true, 
     'ondragleave'  => true, 
     'ondragover'   => true, 
     'ondragstart'  => true, 
     'ondrop'    => true, 
     'ondurationchange' => true, 
     'onemptied'   => true, 
     'onended'   => true, 
     'onerror'   => true, 
     'onfocus'   => true, 
     'oninput'   => true, 
     'oninvalid'   => true, 
     'onkeydown'   => true, 
     'onkeypress'   => true, 
     'onkeyup'   => true, 
     'onload'    => true, 
     'onloadeddata'  => true, 
     'onloadedmetadata' => true, 
     'onloadstart'  => true, 
     'onmousedown'  => true, 
     'onmousemove'  => true, 
     'onmouseout'   => true, 
     'onmouseover'  => true, 
     'onmouseup'   => true, 
     'onmousewheel'  => true, 
     'onpause'   => true, 
     'onplay'    => true, 
     'onplaying'   => true, 
     'onprogress'   => true, 
     'onratechange'  => true, 
     'onreadystatechange' => true, 
     'onreset'   => true, 
     'onscroll'   => true, 
     'onseeked'   => true, 
     'onseeking'   => true, 
     'onselect'   => true, 
     'onshow'    => true, 
     'onstalled'   => true, 
     'onsubmit'   => true, 
     'onsuspend'   => true, 
     'ontimeupdate'  => true, 
     'onvolumechange'  => true, 
     'onwaiting'   => true, 
     'role'    => true, 
     'aria-labelled-by' => true, 
     'aria-described-by' => true, 
     'spellcheck'   => true, 
     'style'    => true, 
     'tabindex'   => true, 
     'title'    => true, 
     'xml:base'   => true, 
     'xml:lang'   => true, 
     'xml:space'   => true, 
    ); 
+0

dokumentiert passieren kann, es würde nicht waren schön, wenn diese Funktion! Ich bin versucht, die Dokumente zu bearbeiten und eine PR zu machen. – David

Verwandte Themen