検索
ホームページバックエンド開発PHPチュートリアルLaravelのデータ検証:正しい方法 - カスタムバリデーター

Data Validation in Laravel: The Right Way - Custom Validators

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></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>
通常、必要なバインディングを行うためにregister()メソッドを使用する前に、Laravelでサービスプロバイダーを作成した場合。ここで拡張したのは、抽象クラスIlluminateSuportServiceProviderの唯一の抽象的な方法です。レジスタ()で検証拡張機能を接着できない理由は、サービスプロバイダーがLaravelによって読み込まれ、Laravelが後で検証パッケージを初期化するため、私たちにスローされた例外のボレーに遭遇するので、それが起動されるためです。存在しないオブジェクトを使用して存在しないものを拡張しようとしています。一方、Boot()メソッドはリクエストがルーティングされる直前に起動されるため、Laravelの検証パッケージに物を安全に接着できます。

ここで、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></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>
名前のalpha_dash検証ルールをalpha_dash_spaces、alpha_num_spacesを使用してpin_codeのalpha_numに置き換えました。

今、http:// /dummy/createにナビゲートすると、問題なく名前とピンコードフィールドにスペースを入力できます。

要約

したがって、この2つのパートチュートリアルでは、次のことを学びました

内蔵データ検証パッケージを使用して、Laravelのデータを検証します。

オブジェクト指向のアプローチを使用して、データ検証を独自のサービス(

単一の責任
    達成のロック解除)に抽象化します。
  1. データ検証サービスで使用する独自のカスタム例外を作成します(True/False Boolean値を使用する代わりに)およびエラーからエラーを保存および取得する方法。
  2. データ検証サービスをコントローラーに挿入して使用します。
  3. カスタム検証ルールを使用してLaravelの検証パッケージを拡張し、サービスプロバイダーを使用して自動ロードします。 脚注
  4. このチュートリアルをポイントまで保持するために、コントローラーに検証サービスを注入し、そこで使用しました。現実のプロジェクトでは、データの消毒とストレージを処理する他の場所で検証サービスを使用する可能性が高いでしょう。理想的には、コントローラーは脂肪がなく、最小限のコードを持っている必要があります。
  5. 考えがありますか?質問?コメントで発射します。
  6. Laravelデータ検証とカスタムバリデーターについてよく尋ねる質問
  7. データ検証にLaravelを使用することの利点は何ですか?
  8. ​​
Laravelは、データ検証のための堅牢で柔軟なシステムを提供する一般的なPHPフレームワークです。データに簡単に適用できるさまざまな検証ルールを提供し、処理される前に必要な標準を満たすようにします。 Laravelの検証システムでは、カスタム検証ルールも許可されているため、データ検証のための独自の基準を定義する機能が得られます。これは、Laravelの組み込み検証ルールでカバーされていない方法でデータを検証する必要がある場合に特に役立ちます。 Balidator :: Extend Methodを使用してカスタム検証ルールを作成します。このメソッドは、検証ルールの名前と、属性名、属性値、および失敗コールバックの3つの引数を受信する閉鎖の2つのパラメーターを取ります。閉鎖内で、カスタム検証ルールのロジックを定義できます。検証が失敗した場合は、適切なエラーメッセージを使用して障害コールバックを呼び出す必要があります。

カスタムルールでLaravelの組み込みの検証ルールを使用できますか?

​​

はい、Laravelを使用すると、カスタムルールとともに組み込みの検証ルールを使用できます。これは、検証ロジックで検証ルールを一緒にチェーンすることで実行できます。たとえば、「必須」ルールを使用してフィールドが空でないことを確認し、カスタムルールを使用してデータの形式を検証できます。

Laravelを使用すると、ビューに検証エラーメッセージを簡単に表示できます。検証が失敗すると、Laravelはセッションに保存されているすべての検証エラーを使用して、ユーザーを以前の場所にリダイレクトします。次に、$エラー変数を使用してビューにこれらのエラーを表示できます。これは、Laravelによってすべてのビューで自動的に利用可能になります。

カスタム検証ルールのエラーメッセージをカスタマイズできますか?はい、Laravelを使用すると、カスタム検証ルールのエラーメッセージをカスタマイズできます。これは、言語ファイルでカスタムメッセージを定義し、検証ロジックでこれらのメッセージを参照することで実行できます。これにより、アプリケーションの特定のニーズに合わせてエラーメッセージを調整する柔軟性が得られます。

laravelで配列を検証するにはどうすればよいですか?

laravelは、「ドット表記」を使用して配列を検証する便利な方法を提供します。検証する配列フィールドを指定してから、検証ルールを適用できます。たとえば、電子メールの配列がある場合は、「電子メール」検証ルールを使用して配列内の各電子メールを検証できます。 Laravelを使用すると、条件付き検証ルールを使用できます。これは、他の条件が満たされている場合にのみ、特定の検証ルールを適用できることを意味します。これは、balidatorインスタンスの時々メソッドを使用して実行できます。

laravelでファイルアップロードを検証するにはどうすればよいですか?

laravelは、「ファイル」、 'などのファイルアップロードのいくつかの検証ルールを提供します。画像 '、「Mime」、および「サイズ」。これらのルールを使用すると、アップロードされたファイルのタイプとサイズを検証し、アプリケーションの要件を満たすようにします。フォームリクエストのカスタム検証ルール。これは、フォームリクエストクラスのルール方法でルールを定義することで実行できます。フォームリクエストデータを検証するときにこれらのルールを使用できます。

laravelで検証障害を処理するにはどうすればよいですか?

LARAVELで検証が失敗した場合、ユーザーを前の場所に自動的にリダイレクトしますすべての検証エラーがセッションに保存されています。その後、これらのエラーをビューで処理し、アプリケーションに適した方法でユーザーに表示できます。

以上がLaravelのデータ検証:正しい方法 - カスタムバリデーターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPでセッション名をどのように構成しますか?PHPでセッション名をどのように構成しますか?Apr 23, 2025 am 12:08 AM

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。

セッションIDをどのくらいの頻度で再生する必要がありますか?セッションIDをどのくらいの頻度で再生する必要がありますか?Apr 23, 2025 am 12:03 AM

セッションIDは、機密操作の前、30分ごとにログイン時に定期的に再生する必要があります。 1.セッション固定攻撃を防ぐためにログインするときにセッションIDを再生します。 2。安全性を向上させるために、敏感な操作の前に再生します。 3.定期的な再生は長期的な利用リスクを減らしますが、ユーザーエクスペリエンスの重量を量る必要があります。

PHPでセッションCookieパラメーターをどのように設定しますか?PHPでセッションCookieパラメーターをどのように設定しますか?Apr 22, 2025 pm 05:33 PM

PHPのセッションCookieパラメーターの設定は、session_set_cookie_params()関数を通じて達成できます。 1)この関数を使用して、有効期限、パス、ドメイン名、セキュリティフラグなどのパラメーターを設定します。 2)session_start()を呼び出して、パラメーターを有効にします。 3)ユーザーログインステータスなど、ニーズに応じてパラメーターを動的に調整します。 4)セキュリティを改善するために、セキュアとhttponlyフラグを設定することに注意してください。

PHPでセッションを使用する主な目的は何ですか?PHPでセッションを使用する主な目的は何ですか?Apr 22, 2025 pm 05:25 PM

PHPでセッションを使用する主な目的は、異なるページ間でユーザーのステータスを維持することです。 1)セッションはsession_start()関数を介して開始され、一意のセッションIDを作成し、ユーザーCookieに保存します。 2)セッションデータはサーバーに保存され、ログインステータスやショッピングカートのコンテンツなど、さまざまなリクエスト間でデータを渡すことができます。

サブドメイン間でセッションをどのように共有できますか?サブドメイン間でセッションをどのように共有できますか?Apr 22, 2025 pm 05:21 PM

サブドメイン間でセッションを共有する方法は?一般的なドメイン名にセッションCookieを設定することにより実装されます。 1.セッションCookieのドメインをサーバー側の.example.comに設定します。 2。メモリ、データベース、分散キャッシュなど、適切なセッションストレージ方法を選択します。 3. Cookieを介してセッションIDを渡すと、サーバーはIDに基づいてセッションデータを取得および更新します。

HTTPSを使用することはセッションセキュリティにどのように影響しますか?HTTPSを使用することはセッションセキュリティにどのように影響しますか?Apr 22, 2025 pm 05:13 PM

HTTPSは、データ送信を暗号化し、中間の攻撃を防ぎ、認証を提供することにより、セッションのセキュリティを大幅に改善します。 1)暗号化されたデータ送信:HTTPSはSSL/TLSプロトコルを使用してデータを暗号化して、送信中にデータが盗まれたり改ざんされたりしないようにします。 2)中間の攻撃を防ぐ:SSL/TLSハンドシェイクプロセスを通じて、クライアントはサーバー証明書を検証して接続の正当性を確保します。 3)認証の提供:HTTPSは、接続が正当なサーバーであることを保証し、データの整合性と機密性を保護します。

PHPの継続的な使用:その持久力の理由PHPの継続的な使用:その持久力の理由Apr 19, 2025 am 12:23 AM

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Mac版

SublimeText3 Mac版

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール