#フォームリクエストクラス
ユーザーがフォーム入力をして送信した HTTP リクエストの情報に対してバリデーションをかける事ができる。
##以下のコマンドで作成できる
$ php artisan make:request #[クラス名]
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class SumpleRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize(): bool
{
// ユーザーがこのリクエストの権限を持っているか否かをbooleanで返す。
// 例 Route::post('comment/{comment}');のパラメータを取得、
// commentsテーブルにidカラムが$commentIdで、
// user_idカラムがログイン中のidであるデータが存在するか否かをチェック。
$commentId = $this->route('comment');
return Comment::where('id', $commentId)
->where('user_id', Auth::id())->exists();
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules(): array
{
return [
// ココにバリデーションを記述する。
'title' => 'required|unique|max:255',
'body' => 'required',
'image' => 'required|file|mime::jpg,jpeg,png,gif',
];
}
}
##authorize()メソッド
権限に関する判定を行うメソッド、権限に対する true,false を設定する。
アプリケーションの他の場所に別の認証ロジックがあれば、trueを返すだけで良い。
##rules()メソッド
この中にバリデーションのルールを書く。
##バリデーションルールの書き方(抜粋)
rules()メソッドの戻り値に連想配列で渡す。
/**
* @return array
*/
public function rules(): array
{
return [
// 必須、指定されたDBテーブルに無い(uniqueな)、255文字までの文字列
'title' => 'required|unique|string|max:255',
// 必須、
'subtitle' => 'required',
// 必須、10MBまでのjpg,jpeg,png,gifファイル
'image' => 'required|file|mimes:jpg,jpeg,png,gif|max:10000',
// 必須、255文字までの文字列
'address' => 'required|string|max:255',
// 必須、10〜11桁の数値
'phone_number' => 'required|digits_between:10,11',
// 必須、数値のみ
'article_id' => 'required|numeric',
// 必須、21845文字までの文字列
// TEXT型(max:65535バイト、UTF-8(1文字3バイト)だと21845文字入る)
'article' => 'required|string|max:21845',
];
}
##使い方
バリデーションを掛けたいコントローラーのメソッドの引数にタイプヒント1で渡す。
渡されたフォームリクエストは、コントローラーメソッドが呼び出される前に確認される。
/**
* @param SumpleRequest $request
* @return Response
*/
public function index(SumpleRequest $request): Response
{
// controllerの処理
}
バリデーションに成功すると、コントローラーの処理に進むが、失敗すると
、エラーメッセージと入力値がフラッシュデータ2として保存され、リダイレクトレスポンス
が返される。
Ajax リクエストの場合、バリデーションエラーを表現する JSON を含んだ、422 ステータスコードの HTTP レスポンスが返される。
##参考文献
Laravel6.xドキュメント/基礎/バリデーション