2009-12-11 95 views
6

只是想知道它是如何工作的以及如何處理信息。如何處理zend框架表單中的多選框?

比方說,我有一個這樣的形式:

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

如果用戶選擇一個,或從多選框多個值...

  • 我如何獲得價值用戶選擇了哪個?
  • 它是否返回數組?或者是什麼?
  • 如何判斷用戶選擇了多少項目?

回答

11

使用像這樣的多選元素:

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

你可以得到像這樣的元素的值:

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將包含已選擇的值的數組:

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

我正在做幾乎相同的事情,但只有一個選定的選項,即使選擇多個。這是我的問題:http://stackoverflow.com/questions/4052512/zend-multiselect-element-is-posting-only-one-selected-values – Awan 2010-11-03 09:17:53

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

將返回$ _ POST [ '名']值。您可以製作

$_POST['name'] 

是一個數組,通過定義括號在最後的元素的名稱。所以在這種情況下,'name []'。在Zend Framework中,使用擴展

Zend_Form_Element_Multi 

元素,請參閱:http://www.framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.multiselect

例如:

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

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

見從布拉德答案。該特殊部分是元素

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

如果調用元素與它會通過瀏覽器(不是ZF行爲)的陣列來處理平方的名稱。否則,你只會得到第一個選擇的元素

0

另外一個此言一出,有人在這裏也許有用(我花了一些時間來得到它):

如果您正在創建自己的多選框元素,你必須擴展Zend_Form_Element_MultiCheckbox,因爲驗證無法正常工作,因此在擴展時只需要Zend_Form_Element_Multi

0

對其他人可能會有所幫助:我在Zend Framework 1.12上發現,如果您不通過多元素,以[]結尾的名稱會在Zend Form中引發錯誤。

E.g.

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

同時:

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

0

利用這個來處理在Zend框架的形式兄弟多選框:

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

所以它會是這樣的你自己的代碼:

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