はじめに
validateメソッドを使ったバリデーション処理について説明します。
Laravelのバージョンは9.43.0です。
使い方
validateメソッドは、コントローラの基底クラスに組み込まれているValidateRequests
というトレイト(メンバーをまとめてクラスに追加するもの)に用意されている機能です。
第1引数にチェックする項目、第2引数に検証する設定情報を配列にまとめたものを渡します。
// contorollerファイル
public function post(Request $request) {
// 検証ルール
$validate_rule = [
'inputタグのname' => 検証ルール1|検証ルール2,
];
// validateメソッド呼び出し
$this->validate($request, [検証ルールの配列]);
}
使用例
コントローラは下記になります。
validateメソッドの第1引数にチェック項目(今回はリクエスト)、第2引数にバリデーションルールを渡します。
// controller
class HelloController extends Controller
{
public function index(Request $request)
{
return view('hello.index', ['msg'=>'フォームを入力:']);
}
public function post(Request $request)
{
$validate_rule = [
'name' => 'required|between:0,150',
];
// validateメソッド使用
$this->validate($request, $validate_rule);
return view('hello.index',['msg' => '正しく入力されました!']);
}
}
viewファイルは下記になります。
@errorディレクティブ
は、()に指定した項目のエラーをチェックします。
下記の場合は、nameをチェックします。
このディレクティブ内では、発生したエラーメッセージを$message
という変数を渡します。
// viewファイル
<p>{{ $msg }}</p>
@if (count($errors) > 0)
<p>入力に問題があります。再入力してください。</p>
@endif
<form actoin="/hello" method="post">
@csrf
<!-- ↓バリデーションエラーのチェック -->
@error('name')
<p>ERROR</p><br>
<p>{{ $message }}</p>
@enderror
<p>name: </p><input type="text" name="name" value="{{ old('mail') }}">
</form>
ちなみに
バリデーション結果の反映処理に関して
Laravelのバリデーション機能が自動に行っており、validateを実行して問題がなければそのまま処理の続きを行う。しかしvalidate時に問題が発生すると例外が発生し、その場でフォームページを表示するレスポンスが生成されてクライアントに返信される。したがって、その後に用意された処理は実行されず、フォームが再表示される。
参考