日本語Englishイントロダクションクイックスタート(ルート定義コントローラー作成バリデーションロジックバリデーションエラー表示AJAXリクエストとバリデーション)他のバリデーションアプローチ(バリデターを自分で作成フォームリクエストバリデーション)エラーメッセージ操作(カスタムエラーメッセージ)使用可能なバリデーションルール条件付きの追加ルールカスタムバリデーションルールイントロダクションLaravelは入力されたデータに対するバリデーションの様々なアプローチを提供しています。Laravelの基本コントローラークラスはパワフルでバラエティー豊かなバリデーションルールを使いHTTPリクエストをバリデーションするために便利な手法を提供している、ValidatesRequestsトレイトをデフォルトで使用しています。クイックスタートパワフルなバリデーション機能を学ぶために、フォームバリデーションとユーザーにエラーメッセージを表示する完全な例を見てください。ルート定義まず、app/Http/routes.phpファイルに以下のルートを定義してあるとしましょう。&#39;PostController@store&#39;);もちろん、GETのルートは新しいブログポストを作成するフォームをユーザーへ表示し、POSTルートで新しいブログポストをデータベースへ保存します。次に、これらのルートを処理する簡単なコントローラーを見てみましょう。今のところstoreメソッドは空のままです。}}バリデーションロジックこれで新しいブログポストに対するバリデーションロジックをstoreメソッドに埋め込む準備ができました。アプリケーションの基本コントローラー(App\Http\Controllers\Controller)クラスを調べてみれば、ValidatesRequestsトレイトを使っているのが分かるでしょう。このトレイトは全てのコントローラーに対して、便利なvalidateメソッドを提供しています。validateメソッドはHTTPリクエストとバリデーションルールを受け取ります。バリデーションに適合するとそのまま続けてコードが実行されます。バリデーションに失敗すると例外が投げられ、適当なエラーレスポンスが自動的にユーザーに送り返されます。伝統的なHTTPリクエストの場合はリダイレクトが生成され、AJAXリクエストの場合はJSONレスポンスが送られます。validateメソッドをもっとよく理解するため、storeメソッドに取り掛かりましょう。ブログポストは有効なので、データベースに保存する...}ご覧の通り、HTTPリクエストと希望のバリデーションルールをvalidateメソッドに渡しているだけです。繰り返しますが、バリデーションに失敗すれば、適当なレスポンスが自動的に生成されます。バリデーションに合格すれば、コントローラーは普通に実行されます。ネストした属性の注意点HTTPリクエストに「ネスト」したパラメーターが含まれている場合、バリデーションルールは「ドット」記法により指定します。説明した通り、Laravelは自動的にユーザーを以前のページヘリダイレクトします。付け加えて、バリデーションエラーは全部自動的にフラッシュデータとしてセッションへ保存されます。GETルートのビューへエラーメッセージを明示的に結合する必要がないことにも注目してください。これはつまり、Laravelはいつもセッションデータの中にエラーの存在をチェックしており、見つけた場合は自動的に結合しているからです。全リクエストの全ビューで、いつでも$errors変数は利用できるのが、重要なポイントです。いつでも$erroes変数が定義されていると仮定でき、安全に利用できるのです。$errorsはIlluminate\Support\MessageBagのインスタンスです。このオブジェクトの詳細は、このドキュメントの後半で説明しています。この例では、バリデーションに失敗すると、エラーメッセージをビューで表示できるように、コントローラーのcreateメソッドにリダイレクトされることになります。--&gt;フラッシュエラーメッセージのカスタマイズバリデーション失敗時にセッションへフラッシュデータとして保存されるバリデーションエラーのフォーマットをカスタマイズしたい場合は、基本コントローラーのformatValidationErrorsをオーバーライドしてください。Illuminate\Contracts\Validation\Validatorクラスをファイルにインポートするのを忘れないでください。}}AJAXリクエストとバリデーションこの例ではアプリケーションにデータを送るために伝統的なフォームを使いました。多くのアプリケーションでAJAXリクエストが使用されています。AJAXリクエストにvalidateメソッドを使う場合、Laravelはリダイレクトレスポンスを生成しません。代わりにバリデーションエラーを全部含んだJSONレスポンスを生成します。HTTPステータスコードで送られます。トレイトのvalidateメソッドを使いたくなければ、Validatorファサードを使い、バリデーターインスタンスを自分で作成してください。このファサードのmakeメソッドで、新しいインスタンスを生成できます。}}makeメソッドの第1引数は、バリデーションを行うデータです。第2引数はそのデータに適用するバリデーションルールです。リクエストがバリデーションを通過できなかった後に、セッションにエラーメッセージをフラッシュデータとして保存するためにwithErrorsメソッドを使ってください。このメソッドを使うと、簡単にユーザーに情報を表示できるようにするため、リダイレクトの後でビューに対し$errors変数を自動的に共有します。withErrorsメソッドはバリデーターかMessageBag、PHPの配列を受け取ります。名前付きエラーバッグ1ページの中に複数のフォームを入れている場合は、特定のフォームのエラーメッセージを受け取れるように、MessageBagへ名前を付けてください。withErrorsの第2引数に名前を渡すだけです。&#39;login&#39;);$errors変数を使い、名前を付けたMessageBagインスタンスへアクセスできます。}}バリデーション後のフックバリデターにはさらに、バリデーションが終了した時点で実行するコールバックを付け加えられます。これにより、追加のバリデーションを行い、さらにエラーメッセージコレクションにエラーメッセージを追加することが簡単にできます。バリデターインスタンスのafterメソッドを使ってみましょう。//}フォームリクエストバリデーションより複雑なバリデーションのシナリオでは、「フォームリクエスト」を生成したほうが良いでしょう。フォームリクエストは、バリデーションロジックを含んだカスタムリクエストクラスです。CLIコマンドを使用します。StoreBlogPostRequest生成されたクラスは、app/Http/Requestディレクトリーへ設置されます。バリデーションルールを少しrulesメソッドへ追加してみましょう。];}では、どのようにバリデーションルールを実行するのでしょうか?必要なのは、コントローラーのメソッドで、このリクエストをタイプヒントで指定することです。やって来たフォームリクエストはコントローラーメソッドが呼び出される前にバリデーションを行います。コントローラーにバリデーションロジックを取っ散らかす必要はありません。やって来たリクエストは正しい...}バリデーションに失敗すると、前のアドレスにユーザーを戻すために、リダイレクトレスポンスが生成されます。エラーも表示できるように、フラッシュデーターとしてセッションに保存されます。リクエストがAJAXリクエストであれば、バリデーションエラーを表現するJSONを含んだ、422ステータスコードのHTTPレスポンスがユーザーに返されます。フォームリクエスト権限フォームリクエストクラスはauthorizeメソッドも用意しています。このメソッドでは認証されているユーザーが、指定されたリソースを更新する権限を実際に持っているのかを確認します。Auth::id())-&gt;exists();}上例の中のrouteメソッド呼び出しに注目してください。このメソッドで、例えば{comment}パラメーターのような、呼びだされているルートのURIパラメーター定義にアクセスさせてくれます。Route::post(&#39;comment/{comment}&#39;);authorizeメソッドがfalseを返すと、403ステータスコードのHTTPレスポンスが自動的に返され、コントローラーメソッドは実行されません。アプリケーションの他の場所で認証のロジックを行おうと設計しているのでしたら、シンプルにauthorizeメソッドからtrueを返してください。true;}フラッシュデータとして保存されるエラー形式のカスタマイズバリデーションが失敗した時にフラッシュデーターとして保存されるバリデーションエラーの形式をカスタマイズしたければ、基本コントローラー(App\Http\Requests\Request)のformatErrorsをオーバーライドしてください。Illuminate\Contracts\Validation\Validatorクラスをファイルの先頭でインポートするのを忘れないでください。$validator-&gt;errors()-&gt;all();}エラーメッセージのカスタマイズフォームリクエストにより使用されているメッセージはmessageメソッドをオーバーライドすることによりカスタマイズできます。このメソッドから属性/ルールと対応するエラーメッセージのペアを配列で返してください。&#39;タイトルが必要です。&#39;メッセージが必要です。];}エラーメッセージの操作Validatorのインスタンスに対しmessagesメソッドを呼びだせば、エラーメッセージを操作するのに便利な様々なメソッドを持つMessageBagインスタンスが取得できます。指定したフィールドの最初のエラーメッセージを取得するには、firstメソッドを使います。指定したフィールドの全エラーメッセージを配列で取得したい場合は、getメソッドを使います。全フィールドの全メッセージの配列を取得したい場合は、allメソッドを使います。//}カスタムエラーメッセージ必要であればバリデーションでデフォルトのメッセージの代わりに、カスタムエラーメッセージを使うことができます。カスタムメッセージを指定するにはいくつか方法があります。最初の方法はValidator::makeメソッドの第3引数として、カスタムメッセージを渡す方法です。&#39;:attributeフィールドは必須です。$messages);この例中のattributeプレースホルダーはバリデーション対象のフィールドの名前に置き換えられます。バリデーションメッセージ中で他のプレースホルダーを使うこともできます。&#39;:attributeと:otherは一致している必要があります。&#39;:attributeはぴったり:sizeである必要があります。&#39;:attributeはminから:maxの間である必要があります。&#39;:attribute以降のタイプのどれかである必要があります。時々特定のフィールドに対するカスタムエラーメッセージを指定したい場合があります。「ドット」記法を使用し行います。属性名が最初で、続いてルールをつなげます。多くの場合、Validatorに直接カスタムメッセージを渡すよりは言語ファイルに指定したいですよね。resources/lang/xx/validation.php言語ファイルのcustom配列にメッセージを追加してください。],],使用可能なバリデーションルール使用可能な全バリデーションルールとその機能の一覧です。IPアドレス指定フィールド存在時必須acceptedそのフィールドがyes、on、1、trueであることをバリデートします。これは「サービス利用規約」同意のバリデーションに便利です。active_urlフィルドがPHPの機能であるcheckdnsrrを通して、有効なURLであるかをバリデートします。after:日付フィールドの値が与えられた日付以降であるかバリデーションします。日付はPHPのstrtotime関数で処理されます。&#39;required|date|after:tomorrow&#39;strtotimeにより評価される日付文字列を渡す代わりに、その日付と比較する他のフィールドを指定することもできます。&#39;required|date|after:start_date&#39;alphaフィールドが全部アルファベット文字であることをバリデートします。alpha_dashフィールドが全部アルファベット文字とダッシュ(-)、下線(_)であることをバリデートします。alpha_numフィールドが全部アルファベット文字と数字であることをバリデートします。arrayフィールドが配列タイプであることをバリデートします。before:日付フィールドが与えられた日付より前であることをバリデートします。日付はPHPのstrtotime関数で処理されます。between:min,maxフィールドが指定された最小値と最大値の間のサイズであることをバリデートします。sizeルールと同様の判定方法で、文字列、数値、ファイルは評価されます。booleanフィールドが論理値として有効であることをバリデートします。受け入れられる入力は、true、false、1、0、"1"、"0"です。confirmedフィールドがそのフィールド名+_confirmationフィールドと同じ値であることをバリデートします。バリデーションするフィールドがpasswordであれば、同じ値のpassword_confirmationフィールドが入力に存在していなければなりません。dateパリデーションされる値はPHP関数のstrtotimeを使用し確認されます。date_format:フォーマットバリデーションされる値がフォーマット定義と一致するか、PHP関数のdate_parse_from_formatを使用し確認されます。バリデーション時にはdateかdate_formatのどちらかを使用しなくてはならず、両方はできません。different:フィールドフィールドが指定されたフィールドと異なった値を指定されていることをバリデートします。digits:値フィールドが数値で、値の桁数であることをバリデートします。digits_between:最小値,最大値フィールドが整数で、桁数が最小値から最大値の間であることをバリデートします。emailフィールドがメールアドレスとして正しいことをバリデートします。exists:テーブル,カラムフィールドの値が、指定されたデータベーステーブルに存在することをバリデートします。&#39;exists:states,abbreviation&#39;さらにクエリーへWHERE節として追加される条件を追加することも可能です。&#39;exists:staff,email,account_id,1&#39;"WHERE"節にNULLかNOT_NULLを渡すことも可能です。&#39;exists:staff,email,deleted_at,NOT_NULL&#39;imageフィールドで指定されたファイルが画像(jpg、png、bmp、gif、svg)であることをバリデートします。in:foo,bar...フィールドが指定されたリストの中の値に含まれていることをバリデートします。integerフィールドが整数値であることをバリデートします。ipフィールドがIPアドレスの形式として正しいことをバリデートします。jsonフィールドが有効なJSON文字列であることをバリデートします。max:値フィールドが最大値として指定された値以下であることをバリデートします。sizeルールと同様の判定方法で、文字列、数値、ファイルが評価されます。mimes:foo,bar,...フィールドで指定されたファイルが拡張子のリストの中のMIMEタイプのどれかと一致することをバリデートします。&#39;mimes:jpeg,bmp,png&#39;拡張子だけを限定する必要があるとしても、このルールはファイルのMIMEタイプに基づき、ファイルの内容を読み、MIMEタイプを推測することでバリデーションを行います。MIMEタイプと対応する拡張子の完全なリストは、http://svn.apache.org/repos/asf/httpd/httpd/trunkmime.types.htmlで確認できます。min:値フィールドが最小値として指定された値以上であることをバリデートします。sizeルールと同様の判定方法で、文字列、数値、ファイルが評価されます。not_in:foo,bar,...フィールドが指定されたリストの中の値に含まれていないことをバリデートします。numericフィールドは数値であることをバリデートします。regex:正規表現フィールドが指定された正規表現にマッチすることをバリデートします。regexパターンを使用する場合はルールをパイプ(縦棒)で区切らず、配列で指定する必要があります。正規表現に縦棒を含んでいる場合に該当します。requiredフィールドが入力に存在しており、かつ空でないことをバリデートします。フィールドは以下の要件がtrueの場合に「空」であると判断されます。