0

下に独自の検証クラスを作成しました/library/My/Validate/

私の形で私は持っています$this->addElementPrefixPath('My_Validate', 'My/Validate', 'validate');

私はバリデーターを次のように使用しています:

$this->addElement('text', 'aField', array(
    'validators' => array(
        array('TestValidator', false, array('messages' => 'test failed')
    ), 
));

これはすべて機能します。ただし、これを 2 つの方法で改善することに関心があります。

  1. すべてのフォームがバリデーターにアクセスできるようにしたいと思います。すべてのフォームで呼び出すaddElementPrefixPath()ことは、これを行うためのクリーンな方法ではないようです。

  2. My_Validate_TestValidator代わりにTestValidator、他の開発者が何を扱っているかをすぐに知ることができるようにしたいと思います。

4

1 に答える 1

0

最初の質問に答えるには、これを行うための唯一の本当に簡単な方法は、プレフィックスパスを設定するinit()メソッドを持つフォームの独自のインスタンス(My_Form_Abstract)を作成し、もちろん親のinit()を呼び出すことです。 。

私はあなたの2番目の方法を完璧に機能させる方法を知りません。バリデーターローダーを正しく構築するには、プレフィックスを保存する必要があります。ただし、別の方法として、フルネームを使用してクラスの新しいインスタンスを作成し、それを要素に追加してみることもできます。

$element = $this->getElement('aField');
$myValidateTestValidator = new My_Validate_TestValidator();
$element->addValidator($myValidateTestValidator);
于 2013-02-19T03:21:14.613 に答える