9

私はZendFrameworkアプリケーションを構築しています。これは、メールアドレスとパスワードを要求するログインフォームとして、ログイン試行でデータベースにアクセスする前にメールアドレスを検証するのが理にかなっているようです。無効なメールが有効なヒットにつながることは決してないからです。Zend_Validate_EmailAddressは正しい方法のように見えましたが、複数のエラーが生成されるという問題があります(コードの後の下部にある質問)。

私のフォームには現在次のものがあります

//WPMail_Form_Login::init()
$email = $this->addElement('text', 'email', array(
    'label'=>'Email',
    'required'=>true,
    'filters'=>array('stringtrim'),
    'validators'=>array(array('emailaddress', true, array(
        'messages'=>array(
            'emailAddressInvalidHostname'=>'Your email address is invalid',
            'emailAddressInvalidFormat'=>'Your email address is invalid',
            '...'=>'(repeat for all message templates)'
        )
    ))),
));

コントローラで、フォームをビューに直接渡します。

// WPMail_AuthController::loginAction()
$this->view->form = $form;

そして、ビューでは、それは直接エコーされます:

// views/scripts/auth/login.phtml
<?php echo $this->form ?>

結果は現在次のようになります。

- Your email address is invalid
- 'asda!!!' does not match the expected structure for a DNS hostname
- 'asda!!!' does not appear to be a valid local network name

私が知りたいのは、Zend _Validate _EmailAddressを、1つの電子メール無効エラーのみを生成するように構成することは可能ですか?'configure'とは、クラスを拡張したり、ロジックを自分のものでオーバーライドしたりすることなく意味します。

TIA。

4

3 に答える 3

10

Zend フォーム要素には、メッセージをカスタマイズするために使用できるさまざまなメソッドがあります。ドキュメントからはあまり明確ではありませんが、 addErrorMessage() は、検証が失敗したときに単一のカスタム エラー メッセージを設定します。

したがって、あなたの例は次のようになります。

$email = new Zend_Form_Element_Text('email');
$email->setLabel('Email')
      ->setRequired(true)
      ->addFilter('stringtrim')
      ->addValidator('emailAddress', true)
      ->addErrorMessage('Your email address is invalid');
$this->addElement($email);

http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators.errorsを参照してください。

于 2009-08-08T12:46:13.713 に答える
3

の使用については、Pádraic Brady によるこのチュートリアルZend_Formをご覧ください。

具体的には、「ステップ 4: カスタム デコレータを使用したエラー メッセージの処理」セクションです。

于 2009-08-06T17:48:00.900 に答える
1

これらのメッセージは1 つのバリデータによって生成されるため、可能ではないと思います:-(

メソッドはすべてのZend_Validate_EmailAddress::isValid検証を行い、全体としてエラーを生成するようです。

1つの「ハッキーな」解決策は、コントローラーでエラーを繰り返し、複数のフィールドがあるフィールドごとに最初のものを除くすべてを削除することです...しかし、私はその音が本当に好きではありません.. .


もちろん、デフォルトの動作を継承して変更することもできます...しかし、あなたはそれをしたくないと述べたので...


それでも、私が間違っていて、方法があれば、私はそれについて非常に興味があります;-)

于 2009-08-06T16:28:11.017 に答える