2009-12-11 6 views
6

Je me demandais comment cela fonctionnait et comment gérer l'information.Comment gérer les boîtes multi-sélection dans un formulaire de structure zend?

Disons que j'ai une forme comme ceci:

$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); 

Si un utilisateur sélectionne un ou plusieurs valeurs d'une boîte multi-select ...

  • Comment puis-je obtenir la valeur que l'utilisateur a sélectionné?
  • Retourne-t-il dans le tableau? ou quoi?
  • Comment puis-je connaître le nombre d'éléments sélectionnés par l'utilisateur?

Répondre

11

L'utilisation d'un élément de sélection à plusieurs comme celui-ci:

$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); 

Vous pouvez obtenir les valeurs de l'élément comme ceci:

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 contient un tableau avec des valeurs qui ont été sélectionnés

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

Je fais presque la même chose mais en obtenant seulement une option sélectionnée en sélectionnant même plusieurs. Voici ma question: http://stackoverflow.com/questions/4052512/zend-multiselect-element-is-posting-only-one-selected-values – Awan

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

retourne la valeur de $ _POST [ 'nom']. Vous pouvez faire

$_POST['name'] 

être un tableau en définissant le nom de l'élément avec des parenthèses à la fin. Donc, dans ce cas, 'name []'. Dans le Zend Framework, utilisez un élément qui étend

Zend_Form_Element_Multi 

S'il vous plaît voir: http://www.framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.multiselect

Par exemple:

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

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

Voir la réponse de brad. La partie spéciale est le nom de l'élément

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

si vous appelez l'élément avec des carrés, il sera traité comme un tableau par le navigateur (pas un comportement zf). Sinon, vous aurez seulement le premier élément sélectionné

0

également une remarque, peut-être utile pour quelqu'un ici (j'ai passé un peu de temps pour le faire):

Si vous créez votre propre élément multi case à cocher, vous devez étendre Zend_Form_Element_MultiCheckbox, car la validation ne fonctionne pas correctement lorsque vous étendez simplement Zend_Form_Element_Multi.

0

Il peut être utile à d'autres: J'ai trouvé sur Zend Framework 1.12 que si vous ne passez pas l'élément multi un nom se terminant par [] il jette une erreur dans Zend Form.

E.g.

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

tout:

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

0

Utilisez cette option pour gérer les boîtes sélectionner plusieurs sous une forme zend framework bro:

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

il sera comme ça dans votre Code promotionnel:

$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);