2011-12-12 98 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')));