0

私はこれを aZend_Forminitメソッドに持っています:

$username_validators = array(
    'Alpha',
    array('StringLength', false, array(3, 20)),
);

$some_form->addElement('text', 'username', array(
    'filters'    => array('StringTrim', 'StringToLower'),
    'validators' => $username_validators,
    'required'   => true,
    'label'      => 'Username:',
));

私が渡しているZend_Validateのと同じ配列をロードするオブジェクトを作成することは可能ですか? 次のようになります。validatorsaddElement

$v = new Zend_Validate();
//this is the part I'm unsure. Zend_Validate doesn't have an addValidators method.
$v->addValidators($username_validators);
echo $v->isValid('testuser1');
4

2 に答える 2

1

インスタンス化時に指定する必要がある動的オプションを必要としない限り、メンバー変数からバリデーターのコレクションを追加できます。

編集

そのままでは、同様のことはできないようです。Zend_Form には、バリデータに「短い形式」を使用できるようにするプラグイン ローダー/レジストリがあります。プラグイン ローダーはパスとクラス プレフィックスを使用して構成されているため、短いフォームと提供されたバリデータ オプションから真のバリデータ インスタンスを実際に作成できます。

対照的に、 のコードは、実際のバリデータ インスタンスZend_Validate::addValidator()を必要とするように見えます。

しかし、次のようにこのフォーム/要素レジストリにピギーバックできるようです: フォーム要素を作成し、要素に短い形式のバリデータを割り当て、要素を呼び出しgetValidators()ます (Zend_Form_Element::getValidators()各短い形式のバリデータを実際のインスタンスに変換するようです)、そして次に、これらのバリデータを一度に 1 つずつ にフィードしZend_Validateます。先は長いようですが、うまくいくはずです。

于 2011-03-21T16:25:48.887 に答える
0

はい、 $username_validators が宣言されていて、関数/クラスのスコープ内でアクセスできる限り、必要なことを行うことができます。クラスを使用している場合は、プライベート変数を宣言します。

private $userVariables;

次に、コンストラクターで次のように入力します。

public function __construct()
{
    $this->userVariables = array(
        //validator options here
    );
}

$this->userVariables を呼び出すことで、この単一のバリデーターを何度でも割り当てることができます。

$v = new Zend_Validate();
$v->addValidators($this->userVariables); //this is the part I'm unsure
echo $v->isValid('testuser1');
于 2011-03-21T16:55:10.210 に答える