我有一个表格中需要的密码字段:
$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验证器的错误消息。
在这些情况下,为什么字段无法验证的任何想法?
答案 0 :(得分:0)
仍然可以改进创建表单元素的方法,
在这里删除setRequired(true)
,并在需要使用此表单元素的地方提及true或false(我认为您对同一元素指定为true和false)。
当您提交空表单时,它会返回addValidator('StringLength', false, array(6, 16))
错误,因为
如果指定addErrorMessages()
函数,它会禁用所有其他验证器消息并撤消其数组消息,因为您忘记提及为字符串lentght添加错误消息元素。
请查看以下示例并尝试将其应用于您的案例。
$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')));