Zend表单 - 为什么验证失败?

时间:2011-12-12 12:00:03

标签: zend-framework zend-form

我有一个表格中需要的密码字段:

$pwd = $this->CreateElement('password', 'pwd')
        ->setLabel('Change Password')
        ->setRequired(true)
        ->addValidator('StringLength', false, array(6, 16))
        ->addValidator('regex', false, array('pattern' => $allowed_pattern))
        ->addErrorMessages(array(
            'regexNotMatch' => "Only alpha-numeric characters and some punctuation are allowed.",
        ))
        ->addFilter('StringTrim');

但是对于表单的编辑,我不想要求这个字段。在那里我使用:

    $form->getElement('pwd')->setRequired(false);
在将表单传递给视图之前,在我的控制器中

。当我检查此表单元素的属性时,我将_allowEmpty设置为1并且_required设置为0.但是当提交表单时(使用空字段),它在此字段上验证失败并返回上面的RexEx验证器的错误消息。

在这些情况下,为什么字段无法验证的任何想法?

1 个答案:

答案 0 :(得分:0)

仍然可以改进创建表单元素的方法,

  1. 在这里删除setRequired(true),并在需要使用此表单元素的地方提及true或false(我认为您对同一元素指定为true和false)。

  2. 当您提交空表单时,它会返回addValidator('StringLength', false, array(6, 16))错误,因为

  3. 如果指定addErrorMessages()函数,它会禁用所有其他验证器消息并撤消其数组消息,因为您忘记提及为字符串lentght添加错误消息元素。

  4. 请查看以下示例并尝试将其应用于您的案例。

    $samplepassword=$this->createElement('samplepassword','samplepassword');
        $samplepassword->setLabel('Password')
                ->addValidator('NotEmpty')
                ->addValidator('StringLength',false,array('min'=>6,'max'=>16,'encoding' => 'UTF-8','messages'=>array(
                                                'stringLengthTooShort' => 'Passwords must be 6 char mi',
                                                'stringLengthTooLong' => 'Passwords must be no longer 16 something like that'
                                            )))
                ->addValidator('regex', false, array('pattern' => $allowedstring,  messages'=>array('regexNotMatch'=>'Passwords should alphabet or something')));