2009-12-11 6 views
6

Basta chiedersi come funziona e come gestire le informazioni.Come gestire le caselle di selezione multipla in un modulo quadro di Zend?

Diciamo che ho un modulo come questo:

$multi = new Zend_Form_Element_Multiselect('users'); 
$multi->setMultiOptions(array(
    //'option value' => 'option label' 
    '21' => 'John Doe', 
    '22' => 'Joe Schmoe', 
    '23' => 'Foobar Bazbat' 
)); 
$form->addElement($multi); 

Se un utente seleziona uno o più valori da una casella di selezione multipla ...

  • Come faccio ad avere il valore che l'utente ha selezionato?
  • Torna alla matrice? o cosa?
  • Come posso sapere quanti elementi l'utente ha selezionato?

risposta

11

Utilizzando un elemento di selezione più come questo:

$multi = new Zend_Form_Element_Multiselect('users'); 
$multi->setMultiOptions(array(
    //'option value' => 'option label' 
    '21' => 'John Doe', 
    '22' => 'Joe Schmoe', 
    '23' => 'Foobar Bazbat' 
)); 
$form->addElement($multi); 

Puoi ottenere i valori dell'elemento in questo modo:

public function indexAction() 
{ 
    $form = new MyForm(); 

    $request = $this->getRequest(); 
    if ($request->isPost()) { 

     if ($form->isValid($request->getPost())) { 

      $values = $form->getValues(); 
      $users = $values['users']; //'users' is the element name 
      var_dump $users; 
     } 
    } 
    $this->view->form = $form; 
} 

$users conterrà una matrice dei valori che sono stati selezionati:

array(
    0 => '21', 
    1 => '23' 
) 
+0

Sto facendo quasi la stessa cosa ma ottenendo solo un'opzione selezionata anche selezionando più. Ecco la mia domanda: http://stackoverflow.com/questions/4052512/zend-multiselect-element-is-posting-only-one-selected-values – Awan

3
$form->getElement('name')->getValue() 

restituirà il valore di $ _POST [ 'name']. È possibile effettuare

$_POST['name'] 

essere un array definendo il nome dell'elemento con staffe alla fine. Quindi in questo caso, 'nome []'. Nel quadro Zend, utilizzare un elemento che si estende

Zend_Form_Element_Multi 

Vedere: http://www.framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.multiselect

Ad esempio:

$multi = $form->createElement('multiselect', 'name[]'); 
$multi->setMultiOptions($options); 
$form->addElement($multi); 

if ($form->isValid($_POST)) { 
    $userSelectedOptions = $form->getElement('name')->getValue(); 
} 
1

Vedere la risposta da brad. La parte speciale è il nome dell'elemento

$multi = $form->createElement('multiselect', 'name[]'); 

se si chiama l'elemento con le piazze che saranno trattati come un array dal browser (non un comportamento ZF). In caso contrario, si otterrà solo il primo elemento selezionato

0

anche una considerazione, forse utile per qualcuno qui (ho trascorso qualche tempo per farlo):

Se si sta creando il proprio elemento più casella di controllo, è necessario estendere Zend_Form_Element_MultiCheckbox, perché la convalida non funziona correttamente, quando si sta estendendo semplicemente Zend_Form_Element_Multi.

0

Può essere utile agli altri: ho trovato su Zend Framework 1.12 che se non si passa l'elemento più un nome che termina in [] si genera un errore in Zend modulo.

E.g.

$this->addElement('multiselect', 'somename'); // throws error

mentre:

$this->addElement('multiselect', 'somename[]'); // works

0

uso questo per gestire multi-selezionare le caselle in uno Zend modulo quadro bro:

$multi->setAttrib('multiple', 'multiple'); 

quindi sarà come questo nella tua codice proprio:

$multi = new Zend_Form_Element_Multiselect('users'); 
    $multi->setAttrib('multiple', 'multiple'); 
    $multi->setMultiOptions(array(
     //'option value' => 'option label' 
     '21' => 'John Doe', 
     '22' => 'Joe Schmoe', 
     '23' => 'Foobar Bazbat' 
    )); 
    $form->addElement($multi);