5

Zend Form を使用して動的フォームを作成しています。

Zendフォームの検証も行っています。

Validation を動的に削除しようとしていますが、成功していません。

Zend Validation を削除するのを手伝ってくれませんか。

以下は、検証を削除するための私のコードです。

$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');
            }
        }
    }
}

私のコードに問題があるかどうか教えてください

ありがとうモハマド・タレク

4

3 に答える 3

4

$form->isValid()を呼び出すに、バリデーターを削除する必要があります。

于 2009-11-10T10:50:45.640 に答える
3

私が思いついた解決策はisValid、フォームクラスのメソッドをオーバーライドし、空白のままにした場合はパスワードフィールドのバリデーターを削除することでした:

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は合成によってフォームが拡張されていることを示しており、Zend フォームの子孫クラスを拡張するときにも解決策が機能します。

ちなみに、パスワードフィールドが必須の場合、このソリューションは機能しません

于 2010-08-27T20:01:26.943 に答える
1

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

$value->removeValidator('ele_4af42ceac7810');

これは通常、要素名に似ているNotEmptyRegex、要素名に反するものです。

多分あなたがしたい

$value->clearValidators();

また、+1 Ismael - 呼び出す前に削除する必要があります$form->isValid()

于 2009-11-10T10:58:05.377 に答える