Laravelのデータ検証:正しい方法 - カスタムバリデーター
キーテイクアウト
- Laravelの組み込みデータ検証パッケージを拡張して、スペースを含むフルネームやPINコードの検証など、特定のニーズのカスタム検証ルールを作成できます。 LaravelのIlluminateValidationValidatorクラスを拡張し、データとそれぞれのエラーメッセージを検証する新しいメソッドを追加することにより、カスタム検証ルールが作成されます。 新しい検証ルールは、「検証」プレフィックスとタイトルの残りの名前に名前が付けられている必要があります。検証ルールは、メソッドの名前が付けられているもの(「検証」プレフィックスなしで)の小文字で行われ、各単語はアンダースコアによって分離されます。
- カスタム検証ルールを作成した後、これらのルールをLaravelの検証パッケージにバインドするために、サービスプロバイダーを作成する必要があります。このサービスプロバイダーは、app/config/app.phpファイルを介してlaravelによってロードされます。
- 前のパートでは、Laravelのデータ検証パッケージを使用してLaravelのデータを検証する方法と、ドライの原則でコードを再利用可能にするためにエンティティ固有のサービスにデータ検証を抽象化する方法を学びました。これで、それぞれの検証ルールを使用して、アプリの各エンティティの検証サービスを簡単に作成し、データを検証し、エラーを簡単にフェッチおよび表示する場所に挿入できます。 しかし、もっと欲しいとしたらどうしますか?
- このチュートリアルのソースコードは、こちらから入手できます。このコードを実行する前に、Project Directory内にLaravel FrameworkをインストールするためにComposerインストールを実行する必要があります。
もっと
の必要性箱から出して、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のデータを検証します。
オブジェクト指向のアプローチを使用して、データ検証を独自のサービス(
単一の責任- 達成のロック解除)に抽象化します。
- データ検証サービスで使用する独自のカスタム例外を作成します(True/False Boolean値を使用する代わりに)およびエラーからエラーを保存および取得する方法。 データ検証サービスをコントローラーに挿入して使用します。
- カスタム検証ルールを使用してLaravelの検証パッケージを拡張し、サービスプロバイダーを使用して自動ロードします。 脚注 このチュートリアルをポイントまで保持するために、コントローラーに検証サービスを注入し、そこで使用しました。現実のプロジェクトでは、データの消毒とストレージを処理する他の場所で検証サービスを使用する可能性が高いでしょう。理想的には、コントローラーは脂肪がなく、最小限のコードを持っている必要があります。
- 考えがありますか?質問?コメントで発射します。
- Laravelデータ検証とカスタムバリデーターについてよく尋ねる質問
- データ検証にLaravelを使用することの利点は何ですか?
カスタムルールでLaravelの組み込みの検証ルールを使用できますか?
はい、Laravelを使用すると、カスタムルールとともに組み込みの検証ルールを使用できます。これは、検証ロジックで検証ルールを一緒にチェーンすることで実行できます。たとえば、「必須」ルールを使用してフィールドが空でないことを確認し、カスタムルールを使用してデータの形式を検証できます。
Laravelを使用すると、ビューに検証エラーメッセージを簡単に表示できます。検証が失敗すると、Laravelはセッションに保存されているすべての検証エラーを使用して、ユーザーを以前の場所にリダイレクトします。次に、$エラー変数を使用してビューにこれらのエラーを表示できます。これは、Laravelによってすべてのビューで自動的に利用可能になります。
カスタム検証ルールのエラーメッセージをカスタマイズできますか?はい、Laravelを使用すると、カスタム検証ルールのエラーメッセージをカスタマイズできます。これは、言語ファイルでカスタムメッセージを定義し、検証ロジックでこれらのメッセージを参照することで実行できます。これにより、アプリケーションの特定のニーズに合わせてエラーメッセージを調整する柔軟性が得られます。
laravelで配列を検証するにはどうすればよいですか?
laravelは、「ドット表記」を使用して配列を検証する便利な方法を提供します。検証する配列フィールドを指定してから、検証ルールを適用できます。たとえば、電子メールの配列がある場合は、「電子メール」検証ルールを使用して配列内の各電子メールを検証できます。 Laravelを使用すると、条件付き検証ルールを使用できます。これは、他の条件が満たされている場合にのみ、特定の検証ルールを適用できることを意味します。これは、balidatorインスタンスの時々メソッドを使用して実行できます。
laravelでファイルアップロードを検証するにはどうすればよいですか?
laravelは、「ファイル」、 'などのファイルアップロードのいくつかの検証ルールを提供します。画像 '、「Mime」、および「サイズ」。これらのルールを使用すると、アップロードされたファイルのタイプとサイズを検証し、アプリケーションの要件を満たすようにします。フォームリクエストのカスタム検証ルール。これは、フォームリクエストクラスのルール方法でルールを定義することで実行できます。フォームリクエストデータを検証するときにこれらのルールを使用できます。
laravelで検証障害を処理するにはどうすればよいですか?
LARAVELで検証が失敗した場合、ユーザーを前の場所に自動的にリダイレクトしますすべての検証エラーがセッションに保存されています。その後、これらのエラーをビューで処理し、アプリケーションに適した方法でユーザーに表示できます。
以上がLaravelのデータ検証:正しい方法 - カスタムバリデーターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。
