入力フォームやクエリパラメータをフォームリクエストでバリデーションする方法について解説します。
フォームリクエスト作成
まず、フォームリクエストを作成します
ターミナルから下記のコマンドで作成しましょう
下記のコマンドでapp/Http/Requests/
ディレクトリにSampleRequest.php
という名前のRequestクラスを作成できます
php artisan make:request SampleRequest
SampleRequestクラスについて
作成されたSampleRequestクラスで確認しましょう
SampleRequest
クラス内にauthorize
メソッドとrules
メソッドができていると思います
rulesメソッドはバリデーションの規則を定義する
下記のようにrules
メソッドを定義すると、title
、body
それぞれに対して下記のような条件を設定しています。
title
カラムには必須、post
テーブル内での一意性、最大文字数を255に設定しています。
body
カラムには必須条件を設定しています
他の条件については公式ページのバリデーションのページを参考に設定してみてください
public function rules()
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
authorizeメソッドはフォームリクエストの使用できる条件を定義
ビューから送信されるURLの設定
保存処理を行うアクションへのURLを下記のように設定している場合を考えています
Route::post('comment/{comment}');
authorize
メソッドの説明
authorize
メソッドはユーザーが、指定されたデータを更新する権限を持っているのかを確認します。
下記のコードでは、ユーザーが更新しようとしているブログコメントを所有しているかを確認します。
public function authorize()
{
$comment = Comment::find($this->route('comment'));
return $comment && $this->user()->can('update', $comment);
}
常に判定に成功する場合
もし、権限判定を他の場所でしている、または権限判定が不要な場合は、
下記のように返り値をtrueにして常に判定が通るようにしてください。
public function authorize()
{
return true;
}
上記の設定でリクエストでバリデーションを使用することができます!!
フォームリクエストの使い方
フォームから送信された値、クエリパラメータを使用する時はコントローラーアクション引数にRequestクラスのインスタンスを設定すると思います。
そこのクラス名を今回独自で設定したSampleRequestを指定してください。
そうするとインスタンス$request
を作成する時に自動でバリデーションをかけてくれます。
public function store(SampleRequest $request)
{
// 送信されたリクエストが正しい場合実行される
}
バリデーションに失敗すると、前のアドレスにユーザーを戻します。
その時に、エラーメッセージも表示できるように、フラッシュデーターとしてセッションに保存されます。
エラーメッセージのカスタマイズ
上記の設定のままではエラーメッセージはデフォルトのままです。
英語で表示され、ユーザーに対して優しい設定とは言えません。
より具体的にエラー内容を設定しましょう
messages
メソッドでメッセージの配列を設定しましょう。
public function messages()
{
return [
'title.required' => 'タイトルは必須項目です',
'body.required' => '内容は必須項目です',
];
}
以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!