2009-12-11 93 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);