如何处理zend框架表单中的多选框?

时间:2009-12-11 20:30:00

标签: zend-framework zend-form

只是想知道它是如何工作的以及如何处理这些信息。

假设我有一个这样的表格:

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

如果用户从多选框中选择一个或多个值...

  • 如何获取用户选择的值?
  • 它是否以数组形式返回?还是什么?
  • 如何判断用户选择了多少项?

6 个答案:

答案 0 :(得分: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'
)

答案 1 :(得分:3)

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

将返回$ _POST ['name']的值。你可以做

$_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();
}

答案 2 :(得分:1)

查看布拉德的答案。特殊部分是元素的名称

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

如果用方块调用元素,它将被浏览器处理为数组(不是zf行为)。否则,您将只获得第一个选定的元素

答案 3 :(得分:0)

还有一句话,对这里的某人有用(我花了一些时间才能得到它):

如果您要创建自己的多元素复选框元素,则必须扩展Zend_Form_Element_MultiCheckbox,因为当您仅Zend_Form_Element_Multi扩展时,验证无法正常工作。

答案 4 :(得分:0)

它可能对其他人有帮助:我在Zend Framework 1.12上发现如果你没有传递多元素一个以[]结尾的名字,它会在Zend Form中抛出一个错误。

E.g。

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

,同时:

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

答案 5 :(得分: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);