2009-11-10 13 views
5

私はZend Formを使って動的フォームを作成しています。Zend form validation

私はZend Formの検証も行っています。

検証を動的に削除しようとしましたが、成功しませんでした。

Zend Validationを削除するにはどうすればよいですか?

ベローがremove検証のための私のコードです:

$toRemValArray = array(); 
$toRemValArray[0] = 'ele_4af42ceac7810'; 

if(isset($_POST['btnPost_x'])){     
    if ($form->isValid($_POST)) { 
     $allElements = $form->getElements(); 
     foreach($allElements as $val){ 
      if(in_array('ele_4af42ceac7810',$toRemValArray)){ 
       $value = $form->getElement($val->getName()); 
       $value->removeValidator('ele_4af42ceac7810'); 
      } 
     } 
    } 
} 

は私が私のコードは、あなたが呼び出す前にバリデータを削除する必要がありますすべての問題に

おかげ ムハンマドTareque

答えて

4

を持っているかどうかを知ってみましょう$ form-> isValid()

1

あなたのコードは、名前でバリデータを削除して

$value->removeValidator('ele_4af42ceac7810'); 

要素名とは対照的に、これは一般的にNotEmptyまたはRegexのようなものです。あなたは$form->isValid()

3

私は私のフォームクラスにisValidメソッドをオーバーライドし、削除した思い付いたソリューションを呼び出す前に、それを削除する必要があります -

はたぶん、あなたはまた

$value->clearValidators(); 

、1イスマエルたいですパスワードフィールド上のバリデータは、それは空白のままにしている場合:

public function isValid($data) 
{ 
    if (empty($data['password'])) { 
     $this->form 
      ->getElement('password') 
      ->clearValidators(); 

     $this->form 
      ->getElement('password_confirm') 
      ->clearValidators(); 
    } 
    return $this->form->isValid($data); 
} 

$this->formは、フォームBと呼ばれますZend Formの子孫クラスを拡張するときにも機能します。パスワードフィールドが

を必要とする場合

ただ、サイドノート、このソリューションは動作しません。

関連する問題