2011-12-12 100 views
0

我有一个是形式所需的密码字段:Zend表单 - 为什么验证失败?

$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

你仍然可以提高创建表单元素的方法,

  1. 取出setRequired(true)这里和您想要使用此表单元素(我想你是指定真假的提true或false相同的元素)。

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

  3. 如果指定addErrorMessages()功能,它禁止其他所有的验证信息和retures及其阵列消息,并因为你忘了提及添加错误消息元素字符串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')));