在其他操作中显示Zend表单的密码验证错误


Show password validation errors of a Zend Form on other action

在我找到的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');
    }
    ...
}

据我所知,当表单被填充(包含无效数据)时,会出现错误自动显示。

事实并非如此,如果用无效值填充表单,则必须再次调用isValid才能运行验证器并用适当的错误消息标记表单和元素。

您也可以将每个元素的错误消息保存在FlashMessenger中,然后将错误消息重新附加回每个元素,但也可以再次调用isValid。如果您使用过带有File元素的表单,则必须保存错误消息,因为您将无法使用上载的文件重新填充该元素。

密码字段出现问题。当然,他们拒绝要填充。

如果您在每个密码字段上设置renderPassword标志(例如:$el->setRenderPassword()),它们将与其他值一起填充,当您调用isValid时,密码字段将被验证,并显示任何适当的错误消息。

希望能有所帮助。