Проблема с добавлением параметров в Zend_Form_Element_Select через контроллер - PullRequest
0 голосов
/ 09 августа 2011

Я создал элемент Select ELement в форме.

    $parentId = $this -> createElement('select', 'parent_id');
    $parentId -> setLabel("Select a parent menu:")
                -> setRequired(true);
    $parentId->addMultiOption(0, 'None');
    $this->addElement($parentId);

Его параметр должен загружаться в соответствии со значением, переданным из строки запроса или URL-адреса.Итак, в моем контроллере я извлек необходимые значения из URL и загрузил дополнительный элемент в элемент, используя следующий код

private function renderParentElement($menu_id, $parent = 0) {
    $mapper = $this -> mapper();
    $select = $mapper -> select();
    $select -> where("parent = ?", $parent)
            -> where("menu_id = ?", $menu_id);
    $menus = $mapper -> fetchAll($select);
    if($menus -> count() > 0) {
        foreach($menus as $menu) {
            $this -> form() -> getElement('parent_id') -> addMultiOption($menu -> id, $menu -> label);
        }
    }
}

. И метод Action, вызывающий указанный выше метод, это

public function addAction()
{
    $menu = $this->_request->getParam('menu');

        $mapperMenu = new Application_Model_Mapper_Menu();
        $this -> view -> menu = $mapperMenu -> find($menu);

        if($this -> _request -> isPost() && $this -> form() -> isValid($_POST)) {
            $data = $this -> form() -> getValues();
            $menuItem = $this -> model();
            $menuItem -> setParent($data['parent']);
            $menuItem -> setMenu_id($data['menu_id']);
            $menuItem -> setLabel($data['label']);
            $menuItem -> setLink($data['link']);
            $menuItem -> setPage_id($data['page_id']);
            $this -> mapper() -> save($menuItem);

            $this -> _request -> setParam('menu', $data['menu_id']);
            $this -> _forward('index');
        }
        $this -> form() -> populate(array('menu_id' => $menu));
        $this -> renderParentElement($menu, 0);
        $this->view->form = $this -> form();
}

Теперь все работало нормально. Элементы были загружены правильно и отображались правильно.Но когда я отправил его, поле выбора выдает ошибку как 1 is not found is the haystack, здесь 1 - это значение выбранного элемента, которое загружается из контроллера.

Пожалуйста, помогите мне решить эту ошибку !!!

Ответы [ 2 ]

0 голосов
/ 09 августа 2011

Из того, что я вижу, у вас нет значений в вашем элементе, прежде чем вы вызовете isValid

$this->renderParentElement($menu, 0);
// you have to set the options in the form before you validate it
if($this->_request->isPost() && $this->form()->isValid($_POST)) { ... }

Обратите внимание, что вам не нужно вызывать ваш метод render дважды, просто переместите его вверх до оператора if

0 голосов
/ 09 августа 2011

При отправке формы Zend пытается сопоставить значения, переданные значениям в поле выбора.Эта ошибка говорит вам о том, что опция со значением '1' не была найдена в select.Что вам нужно сделать, это повторно заполнить поле выбора опциями, прежде чем вызывать isValid.

...