2009-12-11 7 views
6

Zastanawiasz się, jak to działa i jak sobie z nimi poradzić.Jak obsługiwać skrzynki wielokrotnego wyboru w formularzu Zend Framework?

Powiedzmy mam formę takiego:

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

Jeśli użytkownik wybierze jedną lub wiele wartości z wieloma pole zaznaczania ...

  • Jak mogę uzyskać wartość który użytkownik wybrał?
  • Czy wraca w tablicy? albo co?
  • Jak określić liczbę pozycji wybranych przez użytkownika?

Odpowiedz

11

Korzystanie z wielofunkcyjnego wybierz element, jak ten:

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

Możesz otrzymać wartości tego elementu:

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 będzie zawierać tablicę wartości, które zostały wybrane:

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

Robię prawie to samo, ale otrzymuję tylko jedną wybraną opcję, nawet wybierając wiele. Oto moje pytanie: http://stackoverflow.com/questions/4052512/zend-multiselect-element-is-posting-only-one-selected- valuesues – Awan

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

zwróci wartość $ _POST [ 'name']. Można utworzyć tablicę, definiując nazwę elementu za pomocą nawiasów na końcu. W tym przypadku "name []". W Zend Framework, należy element, który rozciąga

Zend_Form_Element_Multi 

proszę zobaczyć: http://www.framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.multiselect

Na przykład:

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

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

Patrz odpowiedź z Bradem. Especial część to nazwa elementu

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

jeśli nazywamy element z kwadratów będzie on rozpatrywany jako tablicę przez przeglądarkę (nie ZF zachowania). W przeciwnym wypadku dostaniesz tylko pierwszy wybrany element

0

także jedna uwaga, może być przydatna dla kogoś tutaj (Spędziłem trochę czasu, aby go):

Jeśli tworzysz swój własny element wielu opcji, to należy rozszerzyć Zend_Form_Element_MultiCheckbox, ponieważ sprawdzanie poprawności nie działa poprawnie, gdy rozszerzasz tylko Zend_Form_Element_Multi.

0

Może być pomocny dla innych: Znalazłem w Zend Framework 1.12, że jeśli nie przejdziesz wieloelementu, nazwa kończąca się na [] spowoduje błąd w formularzu Zend.

E.g.

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

natomiast:

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

0

użycie tego obsłużyć wielokrotnego wyboru pola w bro formularza Zend Framework:

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

więc będzie tak w swojej własny kod:

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