Как выбрать значение с помощью Zend_Form_Element_Select

#zend-form

#zend-форма

Вопрос:

У меня есть следующий код в форме 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 …

Спасибо

Ответ №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')];
  

Ответ №2:

Сначала у меня тот же вопрос, что и у вас, затем я попробовал вот так, это работает:

создайте объект выбора :

 ...//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'); 
...