日本語Englishイントロダクションクイックスタート(ルート定義コントローラ作成バリデーションロジック作成バリデーションエラー表示)フォームリクエストバリデーション(フォームリクエスト作成フォームリクエストの認可エラーフォーマットのカスタマイズエラーメッセージのカスタマイズ)バリデータの生成(自動リダイレクト名前付きエラーバッグバリデーション後フック)エラーメッセージ操作(カスタムエラーメッセージ)使用可能なバリデーションルール条件付きの追加ルール配列のバリデーションカスタムバリデーションルールイントロダクションLaravelは入力されたデータに対するバリデーションの様々なアプローチを提供しています。Laravelの基本コントローラークラスはパワフルでバラエティー豊かなバリデーションルールを使いHTTPリクエストをバリデーションするために便利な手法を提供している、ValidatesRequestsトレイトをデフォルトで使用しています。クイックスタートパワフルなバリデーション機能を学ぶために、フォームバリデーションとユーザにエラーメッセージを表示する完全な例を見てください。ルート定義まず、routes/web.phpファイルに以下のルートを定義してあるとしましょう。&#39;PostController@store&#39;);もちろん、GETのルートは新しいブログポストを作成するフォームをユーザへ表示し、POSTルートで新しいブログポストをデータベースへ保存します。次に、これらのルートを処理する簡単なコントローラーを見てみましょう。今のところstoreメソッドは空のままです。}}バリデーションロジックこれで新しいブログポストに対するバリデーションロジックをstoreメソッドに埋め込む準備ができました。アプリケーションの基本コントローラー(App\Http\Controllers\Controller)クラスを調べてみれば、ValidatesRequestsトレイトを使っているのが分かるでしょう。このトレイトは全てのコントローラーに対して、便利なvalidateメソッドを提供しています。validateメソッドはHTTPリクエストとバリデーションルールを受け取ります。バリデーションに適合するとそのまま続けてコードが実行されます。バリデーションに失敗すると例外が投げられ、適当なエラーレスポンスが自動的にユーザに送り返されます。伝統的なHTTPリクエストの場合はリダイレクトが生成され、AJAXリクエストの場合はJSONレスポンスが送られます。validateメソッドをもっとよく理解するため、storeメソッドに取り掛かりましょう。ブログポストは有効なので、データベースに保存する処理...}ご覧の通り、HTTPリクエストと希望のバリデーションルールをvalidateメソッドに渡しているだけです。繰り返しますが、バリデーションに失敗すれば、適当なレスポンスが自動的に生成されます。バリデーションに合格すれば、コントローラーは普通に実行されます。最初のバリデーションに失敗したら、残りのバリデーションルールの判定を停止したいことも、時にはあります。このためには、bailルールを使ってください。&#39;required&#39;,]);上記の例で、title属性に対するrequiredルールが失敗したら、uniqueルールはチェックされません。ルールは指定された順番にバリデートされます。ネストした属性の注意点HTTPリクエストに「ネスト」したパラメーターが含まれている場合、バリデーションルールは「ドット」記法により指定します。説明した通り、Laravelは自動的にユーザを以前のページヘリダイレクトします。付け加えて、バリデーションエラーは全部自動的にフラッシュデータとしてセッションへ保存されます。GETルートのビューへエラーメッセージを明示的に結合する必要がないことに注目してください。これはつまり、Laravelはいつもセッションデータの中にエラーの存在をチェックしており、見つけた場合は自動的に結合しているからです。$errors変数はIlluminate\Support\MessageBagのインスタンスです。このオブジェクトの詳細は、ドキュメントを参照してください。$errors変数はwebミドルウェアグループに所属する、Illuminate\View\Middleware\ShareErrorsFromSessionミドルウェアによりビューに結合されます。このミドルウェアが適用される場合は、いつでもビューの中で$errors変数が使えます。$errors変数はいつでも定義済みであると想定でき、安心して使えます。この例では、バリデーションに失敗すると、エラーメッセージをビューで表示できるように、コントローラーのcreateメソッドにリダイレクトされることになります。--&gt;フラッシュエラーメッセージのカスタマイズバリデーション失敗時にセッションへフラッシュデータとして保存されるバリデーションエラーのフォーマットをカスタマイズしたい場合は、基本コントローラーのformatValidationErrorsをオーバーライドしてください。Illuminate\Contracts\Validation\Validatorクラスをファイルにインポートするのを忘れないでください。}}AJAXリクエストとバリデーションこの例ではアプリケーションにデータを送るために伝統的なフォームを使いました。多くのアプリケーションでAJAXリクエストが使用されています。AJAXリクエストにvalidateメソッドを使う場合、Laravelはリダイレクトレスポンスを生成しません。代わりにバリデーションエラーを全部含んだJSONレスポンスを生成します。HTTPステータスコードで送られます。フォームリクエストバリデーションフォームリクエスト作成より複雑なバリデーションのシナリオでは、「フォームリクエスト」を生成したほうが良いでしょう。フォームリクエストは、バリデーションロジックを含んだカスタムリクエストクラスです。CLIコマンドを使用します。StoreBlogPost生成されたクラスは、app/Http/Requestディレクトリへ設置されます。このディレクトリが存在しなくても、make:requestコマンドを実行すれば作成されます。バリデーションルールを少しrulesメソッドへ追加してみましょう。];}では、どのようにバリデーションルールを実行するのでしょうか?必要なのは、コントローラーのメソッドで、このリクエストをタイプヒントで指定することです。やって来たフォームリクエストはコントローラーメソッドが呼び出される前にバリデーションを行います。コントローラーにバリデーションロジックを取っ散らかす必要はありません。送られて来たリクエストは正しい}バリデーションに失敗すると、前のアドレスにユーザを戻すために、リダイレクトレスポンスが生成されます。エラーも表示できるように、フラッシュデーターとしてセッションに保存されます。リクエストがAJAXリクエストであれば、バリデーションエラーを表現するJSONを含んだ、422ステータスコードのHTTPレスポンスがユーザに返されます。フォームリクエストの認可フォームリクエストクラスはauthorizeメソッドも用意しています。このメソッドでは認証されているユーザが、指定されたリソースを更新する権限を実際に持っているのかを確認します。$comment);}全リフォームリクエストはLaravelのベースリクエストクラスを拡張していますので、現在認証されているユーザへアクセスする、userメソッドが使えます。上記例中の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メソッドをオーバーライドすることによりカスタマイズできます。このメソッドから属性/ルールと対応するエラーメッセージのペアを配列で返してください。トレイトのvalidateメソッドを使いたくなければ、Validatorファサードを使い、バリデーターインスタンスを自分で作成してください。このファサードのmakeメソッドで、新しいインスタンスを生成できます。}}makeメソッドの第1引数は、バリデーションを行うデータです。第2引数はそのデータに適用するバリデーションルールです。バリデーションをパスするかを確認した後、セッションにエラーメッセージをフラッシュデータとして保存するためにwithErrorsメソッドが利用できます。このメソッドを使うと、簡単にユーザに情報を表示できるようにするため、リダイレクトの後でビューに対し$errors変数を自動的に共有します。withErrorsメソッドはバリデーターかMessageBag、PHPの配列を受け取ります。自動リダイレクトバリデータインスタンスを自分で作成する場合でも、ValidatesRequestトレイトが提供する自動リダイレクトの利点を利用したい場合は、バリデータインスタンスに存在するvalidateメソッドを呼び出してください。バリデーションに失敗すると、ユーザは自動的にリダイレクトされます。AJAXリクエストの場合は、JSONレスポンスが返されます。&#39;required&#39;,])-&gt;validate();名前付きエラーバッグ1ページの中に複数のフォームを入れている場合は、特定のフォームのエラーメッセージを受け取れるように、MessageBagへ名前を付けてください。withErrorsの第2引数に名前を渡すだけです。&#39;login&#39;);$errors変数を使い、名前を付けたMessageBagインスタンスへアクセスできます。}}バリデーション後のフックバリデータにはさらに、バリデーションが終了した時点で実行するコールバックを付け加えられます。これにより、追加のバリデーションを行い、さらにエラーメッセージコレクションにエラーメッセージを追加することが簡単にできます。バリデータインスタンスのafterメソッドを使ってみましょう。//}エラーメッセージの操作Validatorインスタンスのerrorsメソッドを呼び出すと、エラーメッセージを操作する便利なメソッドを数揃えた、Illuminate\Support\MessageBagインスタンスを受け取ります。自動的に作成され、全てのビューで使用できる$errors変数も、MessageBagクラスのインスタンスです。指定したフィールドの最初のエラーメッセージを取得するには、firstメソッドを使います。指定したフィールドの全エラーメッセージを配列で取得したい場合は、getメソッドを使います。//}配列形式のフィールドをバリデーションする場合は、*文字を使用し、各配列要素の全メッセージを取得できます。全フィールドの全メッセージの配列を取得したい場合は、allメソッドを使います。//}指定フィールドのメッセージ存在確認hasメソッドは、指定したフィールドのエラーメッセージが存在しているかを判定するために使います。//}カスタムエラーメッセージ必要であればバリデーションでデフォルトのメッセージの代わりに、カスタムエラーメッセージを使うことができます。カスタムメッセージを指定するにはいくつか方法があります。最初の方法はValidator::makeメソッドの第3引数として、カスタムメッセージを渡す方法です。$messages);この例中のattributeプレースホルダーはバリデーション対象のフィールドの名前に置き換えられます。バリデーションメッセージ中で他のプレースホルダーを使うこともできます。時々特定のフィールドに対するカスタムエラーメッセージを指定したい場合があります。「ドット」記法を使用し行います。属性名が最初で、続いてルールをつなげます。多くの場合、Validatorに直接カスタムメッセージを渡すよりは言語ファイルに指定したいですよね。resources/lang/xx/validation.php言語ファイルのcustom配列にメッセージを追加してください。],],言語ファイル中のカスタム属性名の指定バリデーションメッセージの:attribute部分をカスタムアトリビュート名で置き換えたい場合は、resources/lang/xx/validation.php言語ファイルのattributes配列でカスタム名を指定してください。address&#39;,],使用可能なバリデーションルール使用可能な全バリデーションルールとその機能の一覧です。フィールド値一致時必須acceptedそのフィールドがyes、on、1、trueであることをバリデートします。これは「サービス利用規約」同意のバリデーションに便利です。function.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:最小値,最大値フィールドが整数で、桁数が最小値から最大値の間であることをバリデートします。dimensionsバリデーション対象のファイルが、パラメータにより指定されたサイズに合致することをバリデートします。&#39;dimensions:min_width=100,min_height=200&#39;使用可能なパラメータは、min_width、max_width、min_height、max_height、width、height、_ratio_です。_ratio_制約は、横/縦比を表します。3/2という指定も、1.5のようにfloatでの指定も可能です。&#39;dimensions:ratio=3/2&#39;distinct対象が配列の時、フィールドに重複した値がないことをバリデートします。&#39;distinct&#39;emailフィールドがメールアドレスとして正しいことをバリデートします。exists:テーブル,カラムフィールドの値が、指定されたデータベーステーブルに存在することをバリデートします。&#39;exists:states,abbreviation&#39;existsクエリにデータベース接続を指定する必要があることも多いでしょう。「ドット」記法を用い、テーブル名の前に接続名を付けることで、指定可能です。&#39;exists:connection.staff,email&#39;バリデーションルールで実行されるクエリをカスタマイズしたい場合は、ルールをスラスラと定義できるRuleクラスを使ってください。下の例では、|文字を区切りとして使用する代わりに、バリデーションルールを配列として指定しています。],]);fileフィールドがアップロードに成功したファイルであることをバリデートします。filledフィールドが存在する場合、空でないことをバリデートします。imageフィールドで指定されたファイルが画像(jpg、png、bmp、gif、svg)であることをバリデートします。in:foo,bar...フィールドが指定されたリストの中の値に含まれていることをバリデートします。in_array:別のフィールドフィールドが、他のフィールドの値のどれかであることをバリデートします。integerフィールドが整数値であることをバリデートします。ipフィールドがIPアドレスの形式として正しいことをバリデートします。jsonフィールドが有効なJSON文字列であることをバリデートします。max:値フィールドが最大値として指定された値以下であることをバリデートします。sizeルールと同様の判定方法で、文字列、数値、ファイルが評価されます。mimetypes:text/plain,...フィールドが指定されたMIMEタイプのどれかであることをバリデートします。&#39;mimetypes:video/avi,video/mpeg,video/quicktime&#39;アップロードされたファイルのMIMEタイプを決定するために、フレームワークはその内容を読み込み、MIMEタイプを推測します。クライアントが提供するMIMEタイプとは異なります。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ルールと同様の判定方法で、文字列、数値、ファイルが評価されます。nullableフィールドがnullであることをバリデートします。これはnull値を含無ことができる文字列や整数のようなプリミティブをバリデーションするときに特に便利です。not_in:foo,bar,...フィールドが指定されたリストの中の値に含まれていないことをバリデートします。numericフィールドは数値であることをバリデートします。presentフィールドが存在していることをバリデートしますが、存在していれば空を許します。regex:正規表現フィールドが指定された正規表現にマッチすることをバリデートします。regexパターンを使用する場合はルールをパイプ(縦棒)で区切らず、配列で指定する必要があります。正規表現に縦棒を含んでいる場合に該当します。requiredフィールドが入力データに存在しており、かつ空でないことをバリデートします。フィールドは以下の条件の場合、「空」であると判断されます。