我在Zend表单中有以下代码,创建一个从数据库提供的下拉列表:
// ... previously create the array $list and fill it from database
$element = new Zend_Form_Element_Select('name');
$element->setLabel('List name')
->addMultiOptions($list);
$this->addElement($element, 'list_name', array(
'required' => true,
));
问题:如何在发布表单后获取该值? 使用上面的代码,$ post ['name']返回所选项的索引。 详细信息:html生成的代码显示$ list中的内容作为'label ='分配给每个元素,'value ='属性是我通过$ post检索的索引。 所以我认为这是正确定义Zend_Form_Element_Select选项的问题......
由于
答案 0 :(得分:1)
$ list数组应该构建为:
$list = array(
'value1' => 'label1',
'value2' => 'label2',
);
在调用isValid()之后,您可以使用$form->getValue('list_name');
如果您要检索标签,则可以执行以下操作:
$listNameOptions = $form->getElement('list_name')->getMultiOptions();
$label = $listNameOptions[$form->getValue('list_name')];
答案 1 :(得分:1)
起初,我和你有同样的问题,然后我尝试这样,它有效:
创建选择obj:
...//code above ellipsis
$userName = new Zend_Form_Element_Select("userName"); //create obj
$userName->setLabel('user');
$db = Zend_Registry::get("db");
$sql = $db->quoteInto('select * from user',null);
$users = $db->query($sql)->fetchAll();
$userArray = array();
foreach ($users as $user){
/*use value as the key,while form submited,key was added into response obj*/
$userArray[ $user['name']] = $user['name']; //create the $list
}
$userName->addMultiOptions($userArray);
...
获取所选数据:
...
//check if method is post
if ($this->getRequest()->isPost()){
$formData = $this->getRequest()->getPost();
if($loginForm->isValid($formData)){
//get the selected data
$userName = $this->getRequest()->getParam('userName');
...