只是想知道它是如何工作的以及如何处理这些信息。
假设我有一个这样的表格:
$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);
如果用户从多选框中选择一个或多个值...
答案 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
例如:
$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);