Zend Form не работает должным образом, не может понять концепцию документации - PullRequest
0 голосов
/ 23 марта 2012

Я новорожденный, чтобы Zend. Проходил через документацию Zend Form и не мог понять одну вещь. у меня есть проект на Zend с Oracle, поэтому моя жизнь уже испорчена ;-). Я застрял в нескольких основных проблем класса Zend_Form. Проблема в том, что когда мы настраиваем форму в действии, и она публикуется только для этого действия, очевидно, создается новый объект формы, и мое опубликованное значение исчезает, как дым. Так как сохранить их в живых. Я получил замену $this->getrequest()->getparams(), но в документации Zend и везде, где я видел примеры, все они имеют одинаковый поток. Они не используют getparams() в качестве опции. Позвольте мне взять это через код, чтобы получить очень ясное представление.

public function indexAction()
    {
        $this->view->title = 'Welcome to CashTray ';       // passing title to view
        // creating cashtray mapper object
        $cashTrayMapper = new Application_Model_CashtrayMapper();

        // search form object
/* It will reset the object, a obvious thing*/
            $searchForm = new Application_Form_Cashtray_Search();                       // creating search form object

        if ($this->getRequest()->isPost())                                          // post request found
        {
            var_dump($searchForm->getValues(), $this->getRequest()->getparams());die;                
        }
        else
        {

            $this->view->form = $searchForm;
            // retrieving cashtray list
            $this->view->entries = $cashTrayMapper->fetchAll();                               // passing form to view
        }


    }

ВЫВОД:

array(2) { ["client"]=> string(0) "" ["offset"]=> string(0) "" } 

array(6) { ["controller"]=> string(8) "cashtray" ["action"]=> string(5) "index" ["module"]=> string(7) "default" ["client"]=> string(4) "1001" ["offset"]=> string(3) "214" ["submit"]=> string(6) "Search" } 

Теперь мы можем видеть, что форма отправлена, значения есть, но почему я не могу получить ее через $searchForm->getValues(); В примерах они имеют $form вместо $searchForm, что, как я думаю, не должно быть проблемой .

Ответы [ 3 ]

1 голос
/ 23 марта 2012

Типичный рабочий процесс будет выглядеть примерно так:

public function indexAction()
{
    $this->view->title = 'Welcome to CashTray ';       // passing title to view
    // creating cashtray mapper object
    $cashTrayMapper = new Application_Model_CashtrayMapper();

    // search form object
    $searchForm = new Application_Form_Cashtray_Search();                       // creating search form object

    if ($this->getRequest()->isPost()) {
        if ($searchForm->isValid($this->getRequest()->getPost()) {
            // do stuff and then redirect
        }
    }

    $this->view->form = $searchForm;

    // retrieving cashtray list
    $this->view->entries = $cashTrayMapper->fetchAll();
}

, поэтому, если проверка формы завершится неудачно, данные все еще находятся в объекте формы и будут отображаться снова вместе с соответствующими ошибками.

0 голосов
/ 23 марта 2012

Как уже отмечали другие, вызов $form->isValid($this->getRequest()->getPost()) заполняет вашу форму данными POST, а также фильтрует значения с помощью фильтров и добавляет ошибки, если правила проверки не соблюдаются.

Я хотел бы добавить, чтоВы также можете установить значения формы, вызвав $form->populate($data), где $data - это массив с именами, совпадающими с вашими входными именами.Это удобно, если у вас есть формы для редактирования существующих объектов, и вы хотите предварительно заполнить их.Это не выполняет никаких проверок с валидаторами, в отличие от isValid().

0 голосов
/ 23 марта 2012

Вы должны загрузить (и проверить) значения в Zend_Form с помощью $ searchForm-> isValid ($ this-> getRequest () -> getPost ()).

...