2021.07.08こんにちは。たいら(@tairaengineer2)です。転職を繰り返し現在4社経験している、11年目エンジニアです。PHPのフレームワークの1つのLaravelでAPIでリクエストに対してバリデーションするやり方を丁寧に解説します。APIの基本的な実装のやり方については、こちらの記事をご参考ください。前提条件:実行環境についてAPIでリクエストに対してバリデーションするやり方を解説authorizeメソッドrulesメソッドでバリデーションを定義エラーレスポンスを定義FormRequestサンプルプログラムFormRequestをコントローラーに設定するAPIを実行し確認するまとめ:APIでリクエストに対してバリデーションしたい場合FormRequestを使おう前提条件:実行環境について実行環境は以下の通りです。OSWindows10PHPのバージョン8.0.3Laravelのバージョン8.42.1Postmanのバージョン8.7.0この記事ではC:\Laravel\LaravelSample配下にLaravelのプロジェクトを作成しています。PostmanはAPIのレスポンスを確認するために使います。インストールするやり方はこちらの記事をご参考ください。Windows10にPostmanをインストールするやり方を解説しますAPIでリクエストに対してバリデーションするやり方を解説APIでリクエストに対してバリデーションするやり方をサンプルプログラムをまじえて解説します。リクエストに対してバリデーションをするには、FormRequestを使います。【作成するRequestの名前】です。詳しくは、こちらの記事をご参考ください。make:requestコマンドを解説しますこの記事では【SampleRequest】という名前のFormRequestを使って解説していきます。新規作成された直後の中身は↓のようになっています。[//];}}このFormRequestに対して、バリデーションを定義するために必要なauthorizeメソッドrulesメソッドでバリデーションを定義エラーレスポンスを定義をそれぞれ解説していきます。authorizeメソッドauthorizeメソッドの解説をします。authorizeメソッドとは、ユーザーが指定したリクエストへの権限をチェックするメソッドです。authorizeメソッドがfalseを返した場合、HTTPステータスコードが403のレスポンスが返されます。ユーザー認証は別のところで行うそもそも認証チェックが不要という場合、authorizeメソッドが返す値はtrueに指定する必要があります。この記事では、trueを返すようにします。true;}rulesメソッドでバリデーションを定義rulesメソッドでバリデーションを定義の解説をします。バリデーションは連想配列で定義します。サンプルは以下になります。'max:7'];}連想配列のキーにはバリデーションをかけたいリクエストのキーを指定し、値にはバリデーションを指定します。【age】のように値に配列を指定すれば、複数のバリデーションをかけることも可能です。指定しているバリデーションの意味は以下になります。7文字以内であるかサンプルの定義だとそれぞれのキーにかけられるバリデーションは以下の意味になります。7文字以内であるかrulesメソッドで各キーに対して、適切なバリデーションを指定します。この記事では3つのみ紹介しましたが、他にもバリデーションルールはたくさんあります。詳しくは、こちらの記事をご参考ください。【Laravel】FormRequestに指定できるバリデーションルールをまとめましたエラーレスポンスを定義エラーレスポンスを定義の解説をします。そもそもなぜエラーレスポンスを定義する必要があるかと言うと、もしエラーレスポンスを定義せずエラーが発生した場合、HTMLのレスポンスが返ってくるからです。画面からのリクエストだった場合、それでよいかもしれません。そのため、APIのエラーレスポンスはjsonで返すよう定義する必要があります。エラーレスポンスを定義するには、failedValidationメソッドをオーバーライドします。書き方サンプルは以下になります。Illuminate\Http\Exceptions\HttpResponseException;を宣言する必要があります。「400」とは、エラーレスポンスだった場合返すHTTPステータスのことです。failedValidationメソッドのvalidator変数には、バリデーションを実行し失敗した後のvalidatorが指定されます。そのためPHP$validator->errors()1$validator->errors()で、バリデーションのエラーメッセージを取得できます。HttpResponseException($res);で返します。上記3つを設定したFormRequestサンプルプログラムの全文は以下になります。HttpResponseException($res);}}FormRequestをコントローラーに設定するFormRequestが完成したら、コントローラーに設定します。$request->input('user_name')]);}と設定してあげれば、バリデーションをかけることができるようになります。APIを実行し確認するFormRequestが完成し、コントローラーにも設定したので、バリデーションエラーが返るか確認します。Laravelでサーバーを立ち上げます。サーバーを立ち上げるコマンドの詳細な説明は、こちらの記事をご参考ください。serveコマンドを解説しますAPIのレスポンスを確認するためにPostmanを起動します。基本的な使い方については、こちらの記事をご参考ください。【Postman】基本的な使い方を解説しますKEYとVALUEに以下を設定し、【Send】ボタンを押します。programmer指定したバリデーションの通りに、HTTPステータスが400でエラーレスポンスが返ってくることが確認できました。コメントをキャンセルメールアドレスが公開されることはありません。※サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。Δホームプログラムプロフィールこのブログを運営しているたいらと言います。プログラム言語を合計5言語経験している12年目エンジニアのブロガーです。このブログでは、どこよりも分かりやすくプログラムやツールのインストール方法などを解説し、エンジニアにの疑問解決に役立つ情報を発信します。お問い合わせなどがありましたら、下記のリンクからお願いします。お問い合わせこちらから記事の検索ができます。IDEAXAMPPお問い合わせホーム検索トップサイドバータイトルとURLをコピーしました。