もっと
の必要性箱から出して、Laravelは多くの有用で一般的な検証ルールを提供します。しかし、もっと欲しいとしたらどうでしょうか?もっと具体的なものが必要な場合はどうなりますか?ここの例では、TestFormValidatorではAlpha_Dashを使用して名前を検証しましたが、フルネームを検証するのは理想的ではありません。一般的に、人のフルネームは、名と姓、そしておそらくミドルネームで構成されます。これらはすべてスペースによって分離されます。同様に、フォームでピンコードを検証したい場合は、Laravelが提供するAlpha_Numルールを使用できない場合は、スペースも許可することができるはずです。
さて、Laravelは、検証パッケージを簡単に拡張し、カスタム検証ルールを追加するオプションを提供します。 Rocketcandy/services/validation/create validatorextended.phpを作成し、次のコードを追加します。<span><span><?php </span></span><span> </span><span><span>namespace RocketCandy<span>\Services\Validation</span>; </span></span><span> </span><span><span>use Illuminate<span>\Validation\Validator</span> as IlluminateValidator; </span></span><span> </span><span><span>class ValidatorExtended extends IlluminateValidator { </span></span><span> </span><span> <span>private $_custom_messages = array( </span></span><span> <span>"alpha_dash_spaces" => "The :attribute may only contain letters, spaces, and dashes.", </span></span><span> <span>"alpha_num_spaces" => "The :attribute may only contain letters, numbers, and spaces.", </span></span><span> <span>); </span></span><span> </span><span> <span>public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { </span></span><span> <span><span>parent::</span>__construct( $translator, $data, $rules, $messages, $customAttributes ); </span></span><span> </span><span> <span>$this->_set_custom_stuff(); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Setup any customizations etc </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>protected function _set_custom_stuff() { </span></span><span> <span>//setup our custom error messages </span></span><span> <span>$this->setCustomMessages( $this->_custom_messages ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, spaces and dashes (hyphens and underscores) </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaDashSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z\s-_]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, numbers, and spaces </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaNumSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z0-9\s]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span><span>} //end of class </span></span><span> </span><span> </span><span><span>//EOF</span></span>
ここで、私たちのクラスはLaravelのIlluminateValidationValidatorクラスを拡張し、2つの新しい方法(validatealphadashspaces()とvalidatealphanumspaces())を追加します。検証されているデータフィールド。
ここで注意すべきことは、私たちが方法の名前を付ける方法です。すべての検証ルールメソッド名には、検証プレフィックスが必要であり、残りの部分はタイトルケース(もちろんスペースなし)でなければなりません。検証ルールは、メソッドの名前が付けられているもの(検証プレフィックスなしで)の小文字で行われ、各単語はアンダースコアによって分離されます。したがって、alpha_dash_spaces検証ルールを追加する場合、対応するメソッドはvalidatealphadashspaces()と呼ばれます。
したがって、alpha_dash_spacesとalpha_num_spacesの検証ルールをここに追加しました。 alpha_dash_spacesは文字、ダッシュ(ハイフンとアンダースコア)、およびスペースを許可しますが、alpha_num_spacesは文字、数字(数字0〜9)、スペースのみを許可します。これはまだ終わっていませんが、このクラスはLaravelの検証クラスのみを拡張しています。 Laravelにそれを認識させる必要があります。そのため、上記のVaidationサービスに新しいルールを追加すると、Laravelはそれらのルールに従って検証を実行する方法を知っています。
laravel docsは、これを行うことができると述べています> app/start/global.phpに貼り付けるか、app/start/global.phpにそのファイルをロードしてロードして、app directory内に新しいファイルを作成します。しかし、それはそれほどきれいに見えず、私たちが変更する必要のないファイルを変更して、あちこちにビットやピースを貼り付けます。いいえ、このすべての検証関連コードを一緒に保持したいので、サービスプロバイダーを作成し、カスタム検証ルールをLaravelの検証パッケージに接着します。
balidationextensionserviceprovider.phpを作成します。
<span>Validator<span>::</span>resolver( function( $translator, $data, $rules, $messages ) { </span> <span>return new <span>\RocketCandy\Services\Validation\ValidatorExtended</span>( $translator, $data, $rules, $messages ); </span><span>} );</span>
ここで、Laravelにこのサービスプロバイダーをロードするように指示する必要があります。すべてが設定されます。アプリ/config/app.phpを開き、プロバイダーで配列の最後に次のものを追加します。
<span><span><?php </span></span><span> </span><span><span>namespace RocketCandy<span>\Services\Validation</span>; </span></span><span> </span><span><span>use Illuminate<span>\Validation\Validator</span> as IlluminateValidator; </span></span><span> </span><span><span>class ValidatorExtended extends IlluminateValidator { </span></span><span> </span><span> <span>private $_custom_messages = array( </span></span><span> <span>"alpha_dash_spaces" => "The :attribute may only contain letters, spaces, and dashes.", </span></span><span> <span>"alpha_num_spaces" => "The :attribute may only contain letters, numbers, and spaces.", </span></span><span> <span>); </span></span><span> </span><span> <span>public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { </span></span><span> <span><span>parent::</span>__construct( $translator, $data, $rules, $messages, $customAttributes ); </span></span><span> </span><span> <span>$this->_set_custom_stuff(); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Setup any customizations etc </span></span><span><span> * </span></span><span><span> * <span>@return <span>void</span> </span></span></span><span><span> */ </span></span><span> <span>protected function _set_custom_stuff() { </span></span><span> <span>//setup our custom error messages </span></span><span> <span>$this->setCustomMessages( $this->_custom_messages ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, spaces and dashes (hyphens and underscores) </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaDashSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z\s-_]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span> <span>/** </span></span><span><span> * Allow only alphabets, numbers, and spaces </span></span><span><span> * </span></span><span><span> * <span>@param <span>string</span> $attribute </span></span></span><span><span> * <span>@param <span>mixed</span> $value </span></span></span><span><span> * <span>@return <span>bool</span> </span></span></span><span><span> */ </span></span><span> <span>protected function validateAlphaNumSpaces( $attribute, $value ) { </span></span><span> <span>return (bool) preg_match( "/^[A-Za-z0-9\s]+$/", $value ); </span></span><span> <span>} </span></span><span> </span><span><span>} //end of class </span></span><span> </span><span> </span><span><span>//EOF</span></span>
さて、App/RocketCandy/Services/Validation/TestFormValidator.phpを開き、$ルールプロパティを更新して、次のようになります。
<span>Validator<span>::</span>resolver( function( $translator, $data, $rules, $messages ) { </span> <span>return new <span>\RocketCandy\Services\Validation\ValidatorExtended</span>( $translator, $data, $rules, $messages ); </span><span>} );</span>
今、http://
したがって、この2つのパートチュートリアルでは、次のことを学びました
オブジェクト指向のアプローチを使用して、データ検証を独自のサービス(
単一の責任はい、Laravelを使用すると、カスタムルールとともに組み込みの検証ルールを使用できます。これは、検証ロジックで検証ルールを一緒にチェーンすることで実行できます。たとえば、「必須」ルールを使用してフィールドが空でないことを確認し、カスタムルールを使用してデータの形式を検証できます。
カスタム検証ルールのエラーメッセージをカスタマイズできますか?はい、Laravelを使用すると、カスタム検証ルールのエラーメッセージをカスタマイズできます。これは、言語ファイルでカスタムメッセージを定義し、検証ロジックでこれらのメッセージを参照することで実行できます。これにより、アプリケーションの特定のニーズに合わせてエラーメッセージを調整する柔軟性が得られます。
laravelは、「ドット表記」を使用して配列を検証する便利な方法を提供します。検証する配列フィールドを指定してから、検証ルールを適用できます。たとえば、電子メールの配列がある場合は、「電子メール」検証ルールを使用して配列内の各電子メールを検証できます。 Laravelを使用すると、条件付き検証ルールを使用できます。これは、他の条件が満たされている場合にのみ、特定の検証ルールを適用できることを意味します。これは、balidatorインスタンスの時々メソッドを使用して実行できます。
laravelは、「ファイル」、 'などのファイルアップロードのいくつかの検証ルールを提供します。画像 '、「Mime」、および「サイズ」。これらのルールを使用すると、アップロードされたファイルのタイプとサイズを検証し、アプリケーションの要件を満たすようにします。フォームリクエストのカスタム検証ルール。これは、フォームリクエストクラスのルール方法でルールを定義することで実行できます。フォームリクエストデータを検証するときにこれらのルールを使用できます。
LARAVELで検証が失敗した場合、ユーザーを前の場所に自動的にリダイレクトしますすべての検証エラーがセッションに保存されています。その後、これらのエラーをビューで処理し、アプリケーションに適した方法でユーザーに表示できます。
以上がLaravelのデータ検証:正しい方法 - カスタムバリデーターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。