2013-07-18 12 views
6

電子メールフィールドのバリデータ設定が次のような入力フィルタがあります。Zend Frameworkのカスタマイズ2電子メールフィールドバリデータのエラーメッセージ

'validators' => array(
    array (
     'name' => 'EmailAddress', 
     'options' => array(
      'messages' => array(
       'emailAddressInvalidFormat' => "Email address doesn't appear to be valid.", 
      ) 
     ), 
    ), 
    array (
     'name' => 'NotEmpty', 
      'options' => array(
       'messages' => array(
        'isEmpty' => 'Email address is required', 
       ) 
      ), 
     ), 
    ), 
), 

それは動作しますが、その部分は結構ですが、私はユーザーにこのエラーメッセージを吐くアプリを出す場合、私は永遠にここにビジネスユニットに笑われてしまいます何、次のとおりです。

入力パターンと一致しない

'/^[a-zA-Z0-9.!#$% &' +/=^_ `{|}?〜 - ] + @ [-はZa - Z0-9 - ] +(α:。[a-zA-Z0-9 - ] +) $/'

奇妙なオタクのコメディがそこに埋もれている(はい、私はそれが正確だと分かっていますが、ロルフ)。

私はここで一種の魂のための2つの質問があります:どのように私は、そのエラーメッセージをカスタマイズすることができ

を?私は簡単に'emailAddressInvalidFormat'のために正しいキーを見つけることができません。

また、すべてのエラーを1つにまとめることはできますか?それは私が意味することです。むしろ投稿より:

「あなたのメールパターンはちょうどあなたの電子メールが 空白&することはできません&建物を残したあなたのメールアドレスは有効ではありません」私は「単一障害」を置くことができますメールのメッセージ?

「あなたのメールをチェックしてください、何かが正しくありません!」

常にお世話になります。ここ https://github.com/zendframework/zend-validator/issues/41

+2

エラーが発生したときに複数のメッセージが表示されないようにするには、バリデーター 'break_chain_on_failure '=> true、'を追加します。 – Tounu

+0

これを1つのエラーメッセージと一緒に使用できますか?どのように指定する? – Saeven

+0

EmailAddressバリデータのバグのようです。 'バリデータは' =>配列( \t \t \t \t \t \t配列( \t \t \t \t \t \t \tの 'name' => 'のEmailAddress'、 \t:私は通常ちょうどバリデータがfalseを返したときに使用する1つのメッセージを設定します\t \t \t \t \t \t 'オプション' =>配列( \t \t \t \t \t \t \t \t 'メッセージ' => '無効なメールアドレス'、 \t \t \t \t \t \t \t) \t \t \t \t \t \t) \t \t \t \t \t)、( 'メッセージ' の単数形に注意してください。これは、実際にはRegexバリデーター(NOT_MATCH)から来るパターンマッチメッセージを吐き出すEmailAddressバリデーターを除いて機能します。 – Ruben

答えて

0

「の入力がパターンにマッチしません」というメッセージこのバグの

UPDATE

投票はありませんZend\Validator\EmailAddressクラスで、実際にZend\Validator\Regex::NOT_MATCHのようです。

Regexバリデータをどこで使用するかは、コードからわかりません。 EmailAddressは内部でRegexを使用していないと私は信じています。

あなたがRegexメッセージをカスタマイズしたい場合、それはおそらく次のようになります。

array (
    'name' => 'Regex', 
    'options' => array(
     'messages' => array(
      'regexNotMatch' => "Not so nerdy message here.", 
     ) 
    ), 
), 
+0

残念ながらそれが動作しない、私は 'regexNotMatch'のメッセージテンプレートが存在しません。 ZF 2.2.6 – Saeven

4

はZF2での電子メールの検証のためのカスタムメッセージのためにこれを試してみてください:

'validators' => array(
       array( 
        'name' => 'EmailAddress', 
        'options' => array( 
         'messages' => array(
         \Zend\Validator\EmailAddress::INVALID_FORMAT => '"Hey bud, check your email, something ain\'t right!"' 
         )    
        )     
       )    
      )   
0

それはありません1つのメッセージだけを具体化することは可能ですが、それでもうまくいくはずです:

$message = sprintf(
     $this->getTranslate()->translate(
      '%s filled is not a valid e-mail address, please inform a valid in the field.' 
     ), 
     $entity 
    ); 

    return array(
     'name' => 'EmailAddress', 
     'options' => array(
      'messages' => array(
       \Zend\Validator\EmailAddress::INVALID   => $message, 
       \Zend\Validator\EmailAddress::INVALID_FORMAT  => $message, 
       \Zend\Validator\EmailAddress::INVALID_HOSTNAME => $message, 
       \Zend\Validator\EmailAddress::INVALID_MX_RECORD => $message, 
       \Zend\Validator\EmailAddress::INVALID_SEGMENT => $message, 
       \Zend\Validator\EmailAddress::DOT_ATOM   => $message, 
       \Zend\Validator\EmailAddress::QUOTED_STRING  => $message, 
       \Zend\Validator\EmailAddress::INVALID_LOCAL_PART => $message, 
       \Zend\Validator\EmailAddress::LENGTH_EXCEEDED => $message, 
      ), 
     ), 
     'break_chain_on_failure' => true 
    ); 
2

はZF2によると、電子メールアドレスの検証は、次のとおりです。前述のように

$this->add(array(
     'name'  => 'email', 
     'required' => true, 
     'validators' => array(
      array(
       'name' => 'EmailAddress', 
       'options' => array(
        'message' => array(
         \Zend\Validator\EmailAddress::INVALID => "Invalid type given. String expected", 
         \Zend\Validator\EmailAddress::INVALID_FORMAT  =>"The input is not a valid email address. Use the basic format [email protected]", 
         \Zend\Validator\EmailAddress::INVALID_HOSTNAME =>"'%hostname%' is not a valid hostname for the email address", 
         \Zend\Validator\EmailAddress::INVALID_MX_RECORD =>"'%hostname%' does not appear to have any valid MX or A records for the email address" , 
         \Zend\Validator\EmailAddress::INVALID_SEGMENT =>"'%hostname%' is not in a routable network segment. The email address should not be resolved from public network", 
         \Zend\Validator\EmailAddress::DOT_ATOM   =>"'%localPart%' can not be matched against dot-atom format" , 
         \Zend\Validator\EmailAddress::QUOTED_STRING  =>"'%localPart%' can not be matched against quoted-string format", 
         \Zend\Validator\EmailAddress::INVALID_LOCAL_PART =>"'%localPart%' is not a valid local part for the email address" , 
         \Zend\Validator\EmailAddress::LENGTH_EXCEEDED =>"The input exceeds the allowed length", 
         ), 
       ), 
      ), 
     ), 
    )); 

、追加の検証が正規表現することができ、場合、私はまた、確認メールが私のdbではないようにするためにNoObjectExistsを持っています電子メールアドレスはログインに使用されます:

array(
    'name'  => 'DoctrineModule\Validator\NoObjectExists', 
    'options' => array(
     'object_repository' => $sm->get('doctrine.entitymanager.orm_default')->getRepository('MyMudole\Entity\User'), 
     'fields'   => 'email', 
     'message'=>'This email is associated with another user! Please use another email', 
    ), 
), 
関連する問題