Zend Form с Ajax и проверкой - PullRequest
1 голос
/ 14 марта 2011

После «логической» проблемы у меня есть контроллер с двумя действиями:

IndexAction: отображение формы поиска, внутри представления Script - это тег Div для отображения результатов поиска.

действие проверяет форму:

    public function indexAction()
    {
        $searchForm = new My_Form_Search();
        $statsService =  new My_Service_Statistics();

        if ($this->getRequest()->isPost()) {
            if ($searchForm->isValid($this->getRequest()->getParams())) {
                $this->_forward('ajax-do-search');
            } else {
                //???
                // i want to display the errors
                exit();
            }
        }

        $this->view->search = $searchForm;
    }

public function ajaxDoSearchAction()
{
    $this->view->result = array();
    $searchForm = new My_Form_Search();

    if ($this->getRequest()->isPost()) {
        if ($searchForm->isValid($this->getRequest()->getParams())) {
            $query = $searchForm->getValue('search');
            $search = new My_Service_Search();
            $hits = $search->find($query);
            // more...

        }
    }
}

Если она действительна, она перенаправляется в действие поиска, и представление отображается через Jquery.form в определенном div.

Но что делать, если серверпроверка стороны не удалась?без "выхода ();"действие index отображается внутри результата div.

Я думаю, что решение простое, но для большого количества кода сегодня :-)

Я знаю, что могу предотвратить это с помощью проверки на стороне клиента, но я добавляю php: -

1 Ответ

2 голосов
/ 14 марта 2011

Ваш дизайн плох ИМО.

Разветвите свой код, используя $ this -> _ request-> isXmlHttpRequest ().

Затем выведите на экран либо всю страницу (без отступления j-js), либо только ошибки / результаты

if ($this->_request->isXmlHttpRequest()) {
    if ($form->isValid($post)) {
        $result = array('status'=>'ok', 'data' => $model->getResults());
        $this->_json($result);
    } else {
        $result = array('status'=>'error', 'data' => $form->getErrors());
        $this->_json($result);
    }
} else {
    //like you would without ajax
}
...