Показать ошибки проверки пароля Zend Form для других действий - PullRequest
1 голос
/ 24 марта 2012

во всех примерах Zend_Form, которые я нахожу, представление, показывающее форму, соответствует действию, в котором она обрабатывается. Однако мне нужно представление, которое отображает несколько независимых форм и отдельных действий для обработки каждой из форм (чье представление не используется).

Перенаправление на отдельные действия не является проблемой, формы обрабатываются там, но когда появляются ошибки проверки, я хочу, чтобы они отображались в общем представлении рядом с каждым элементом в стиле Zend_Form. Как я понимаю, при заполнении формы (с неверными данными) ошибки отображаются автоматически. Затем, когда форма недействительна, я использую FlashMessenger для хранения недопустимого содержимого, затем перенаправляюсь на основное общее действие и заполняю форму им.

Проблема возникает с полями пароля. Они, конечно, отказываются заполняться, и поэтому не показывают никаких сообщений об ошибках. Могу ли я отобразить это без необходимости вручную выяснить, какая ошибка произошла?

Спасибо за ваше внимание и терпение с моим английским: P

PS: Для лучшего понимания я добавляю пример кода, объясняющего, что я делаю ...

class TestController extends Zend_Controller_Action
{

    ...

    public function commonAction() {
        /*Initialize form objects*/
        $form1 = new Application_Form_Form1();
        ...
        $formN = new Application_Form_FormN();

        /*Fill forms if needed*/
        $flashMess = $this->_helper->FlashMessenger;
        if ($flashMess->hasMessages()) {
            $messages = $flashMess->getMessages();
            switch ($messages[1]) {
                case 'form1':
                    $form1->populate($messages[0]);
                    break;
                ...
                case 'formN':
                    $fotmN->populate($messages[0]);
                    break;
                default:
                    ...
                    break;
            }
        }

        /*Assign to the view*/
        $this->view->form1 = $form1;
        ...
        $this->view->formN = $formN;
    }

    public function form1Action() {
        if ($this->getRequest()->isPost()) {
            $form1 = new Application_Form_Form1();
            $data = $this->getRequest()->getPost();
            if ($form1->isValid($data)) {
                ...
            } else {
                $this->_helper->FlashMessenger($data);
                $this->_helper->FlashMessenger('form1');
            }
        }
        $this->redirect('/test/common');
    }

    ...

}

1 Ответ

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

Как я понимаю, при заполнении формы (с неверными данными) появляются ошибки отображаются автоматически.

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

Вы также можете сохранить сообщения об ошибках для каждого элемента в FlashMessenger, а затем повторно прикрепить сообщения об ошибках обратно к каждому элементу, но вы также можете снова вызвать isValid. Если вы когда-либо использовали форму с элементом File, вам придется сохранить сообщение об ошибке, поскольку вы не сможете повторно заполнить элемент загруженным файлом.

Проблема возникает с полями пароля. Эти, конечно, отказываются быть населённым.

Если вы установите флаг renderPassword (например: $el->setRenderPassword()) в каждом поле пароля, они будут заполнены вместе с остальными значениями, а когда вы наберете isValid, поле пароля будет проверено и все соответствующие появится сообщение об ошибке.

Надеюсь, это поможет.

...