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

时间:2012-03-24 19:44:14

标签: php zend-framework zend-form

在我发现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 个答案:

答案 0 :(得分:1)

  

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

情况并非如此,如果您使用无效值填充表单,则必须再次调用isValid才能运行验证程序并使用相应的错误消息标记表单和元素。

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

  

密码字段出现问题。当然,这些都是拒绝的   填充。

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

希望有所帮助。