2009-08-06 1 views
9

私はログインフォームでメールアドレスとパスワードを要求するZendFrameworkアプリケーションをビルドしています。無効な電子メールが有効なものにならないため、ログイン試行でデータベースにアクセスする前に電子メールアドレスを検証するのが理にかなっているようですヒット。 Zend_Validate_EmailAddressは正しい方法のように思えましたが、複数のエラーが発生しています(コードの後ろの質問)。Zend_Formでは、Zend_Validate_Emailが複数のエラーを生成するのを避けるには?

私のフォームは、現在私が直接ビューにフォームを渡すコントローラには、以下の

//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; 

とビューで、それが直接echo'dです:

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

結果は次のようなものです:

私が知りたい欲しい210
- 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の_検証_のEmailAddressを設定することは可能ですか? 'configure'とは、クラスを拡張せずに自分自身でロジックをオーバーライドしないという意味です。

TIA。

答えて

10

Zend Form Elementには、メッセージをカスタマイズするためのさまざまな方法があります。ドキュメントからはそれほど明確ではありませんが、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); 

は実際には、メッセージが2つのバリデータによって生成されたhttp://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators.errors

+0

素敵な、ありがとう!私は実際にそれに遭遇しましたが、何らかの理由でエラーメッセージを追加するとフォームが無効になることが想定されていました(それはあなた自身の検証を行うときの一部です)。 – kander

+2

これは混乱することがあります.. $ email-> addError($ message)はエラーを設定し、無効とマークしますが、$ email-> addErrorMessage($ message)はメッセージを設定するように見えます。エラーを設定しないでください! – simonrjones

+0

+1、知識のおかげです。 – Ish

1

これらのメッセージは、1つのバリデータによって生成されているように、私は

:-( Zend_Validate_EmailAddress::isValid方法は、全体として、エラーを発生さに、すべての検証を行うことができないと思う、それはそうです。

1つの「ハッキー」ソリューションは、複数のフィールドを持つコントローラでエラーを処理し、最初のもの以外のすべてを削除することです...しかし、私は本当にサウンドが気に入らないその...


あなたは、もちろん、より継承し、デフォルトの動作を変更する可能性が...しかし、あなたは、私が間違っている場合は、まだ


ことをやりたい、そう...しませんでした述べました方法がある、私はそれについて非常に興味がある;-)

+1

を参照してください!Zend_Validate_HostnameがZend_Validate_Emailによって間接的に呼び出されました。 – kander

3

tutorialをチェックしてください、Prady BradyがZend_Formを使っています。

特に、「ステップ4:カスタムデコレータでのエラーメッセージの処理」のセクション

+0

翻訳者をステップ5の請求書で使用することを意味しますか?それでも、それぞれのエラータイプに対してデフォルトメッセージの複数の宣言が必要なようです。 – simonrjones

+0

いいえ、私はステップ4を意味します。カスタムエラーデコレータを書くと、すべてのメッセージを爆破するのではなく、電子メールバリデーターから*最初の*メッセージを返すことができます。 –

+0

すばらしいリンク!カスタムデコレータは、私が望むものを得るために別の方法(simonrjonesのソリューションと比較して)であるように見えますが、これはちょっとモンティ・パイソンの「Mosquito Hunting」スケッチを思い起こさせます...これを実現するには多分重い手ですsimonrjonesの解と比較して。 – kander

関連する問題