2017-04-07 9 views
0

のは、我々は次のカスタムバリデータを持っているとしましょう:検証名によって示唆されるようにLaravelのカスタム検証方法で既存の検証方法を再利用するにはどうすればよいですか?

​​

は、私は、電子メールアドレスのMXレコードの検証を作成したいです。最初のことは最初ですが、電子メールアドレスの形式を確認することは有効です。

<?php 

namespace Illuminate\Validation; 

class Validator implements ValidatorContract 
{ 
    /** 
    * Validate that an attribute is a valid e-mail address. 
    * 
    * @param string $attribute 
    * @param mixed $value 
    * @return bool 
    */ 
    protected function validateEmail($attribute, $value) 
    { 
     return filter_var($value, FILTER_VALIDATE_EMAIL) !== false; 
    } 
} 

しかし、理想的な世界では、私はDRY原則に固執したい:今、私は単純によく知ら機能を使用していますValidatorクラス自体から既存の検証ロジックをコピーする場合、これは十分に単純であることを知っています。

カスタムバリデーター内でこのメソッドを呼び出す方法があるかどうかは疑問です。例えば。 (動作しません):​​。

この質問に対する唯一の解決策は、自分自身を繰り返さない方法であり、Laravel電子メールバリデーターにピギーバックすることです。今のところ、私はただ既存のロジックをコピーします。

これが可能であれば、私は他の検証方法を強化する道を開いているので、単にペダンティカルであるという問題ではありません。

+0

あなたは常に静的クラス –

+0

でそれらを置くことができます(静的クラス内で、この検証ルールを置くことにより – Jonathan

+1

について詳しく説明することができますしてください静的関数)では、シングルトンやオブジェクトの通過を必要とせずにどこからでも検証関数を呼び出すことができます。 –

答えて

1

あなたのカスタム検証の中でLaravel電子メール検証機能を呼び出すのではなく、なぜ、emailルールをルールとして使うことができないのだろうと思います。上書きする必要はありません。例えば

$this->validate($request, [ 'email' => 'bail|email|email_and_mx_record', ... ]);

bailドキュメント:

時にはあなたが最初の検証が失敗した後 属性の検証ルールの実行を停止することを望むかもしれません。これを行うには、属性に 保釈ルールを割り当てるには:あなたは解決策を持っている場合は

+0

これは確かに有効な解決策ですが、全体的に発生する最初のエラーにも戻りませんか?または私は間違っていますか?私。誤解されなければユースケースの警告がある解決策です。また、標準的な電子メールの検証のような '電子メール'フォーマットの検証は、私のルールに言い方を変えて行われていることを暗示しているので、むしろ "email | and_mx_record"簡単。 – Jonathan

+0

私は 'bail'でドキュメントをもう一度読みましたが、おそらくこれは問題の解決に十分です。残っている唯一の問題は、電子メール形式もチェックされていることを意味しないように、ルールの名前を変更することです。単に 'email_mx_record'、または別の方法を見つけることができます。 – Jonathan

+0

私はこの問題を解決するので、これを吟味した後、今晩の後に正しいとマークしますが、私が何を意味するかを知っていれば、それが解決されたかどうかわかりません! – Jonathan

関連する問題