Laravelでフォームバリデーションを組み込む方法(Controller側)
生徒
「先生、Laravelでフォームの入力値をチェックする方法はありますか?」
先生
「もちろんあります。LaravelではController側で簡単にフォームバリデーションを組み込めます。」
生徒
「具体的にはどうやって書くんですか?」
先生
「それでは、実際のControllerコードを例に見ていきましょう!」
1. バリデーションとは?
バリデーションとは、ユーザーがフォームに入力した値が正しいかどうかをチェックする処理のことです。例えば、メールアドレス欄に文字列が入っていたり、必須入力欄が空だった場合にエラーを返すことで、不正なデータが保存されるのを防ぎます。Laravelのバリデーションを理解すると、安全で信頼性の高いアプリケーションを作ることができます。
2. Controllerでバリデーションを組み込む方法
Controllerでバリデーションを組み込む場合、Requestオブジェクトのvalidate()メソッドを使います。簡単な例として、名前とメールアドレスを入力するフォームのバリデーションは次のように書けます。
use Illuminate\Http\Request;
public function store(Request $request) {
$validated = $request->validate([
'name' => 'required|max:50',
'email' => 'required|email'
]);
// バリデーションを通ったデータを使って処理を行う
// 例: データベースに保存する
}
このコードでは、nameが必須で最大50文字まで、emailが必須かつメール形式であることをチェックしています。もしバリデーションに引っかかると、自動的に前のフォームページにリダイレクトされ、エラーメッセージが表示されます。
3. バリデーションルールの種類
Laravelには多くの便利なバリデーションルールが用意されています。主なルールをいくつか紹介します。
required: 必須入力email: メールアドレス形式max:数値: 最大文字数または数値の上限min:数値: 最小文字数または数値の下限confirmed: 確認入力フィールドとの一致(例: パスワード)
これらを組み合わせることで、柔軟にフォームの入力チェックを行えます。
4. バリデーションエラー時の自動リダイレクト
Controllerでvalidate()を使用すると、バリデーションに失敗した場合は自動で前のページにリダイレクトされます。また、エラー内容はセッションに保存されるため、Bladeテンプレートで簡単に表示できます。
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
このように書くと、ユーザーが入力ミスした箇所が分かりやすく表示されます。
5. old()関数と組み合わせる
前回入力した値を保持するold()関数と組み合わせると、フォーム再表示時にユーザーが入力した値を復元できます。例えば、名前欄を次のように書くと、入力値が消えません。
<input type="text" name="name" value="{{ old('name') }}">
これにより、ユーザーはエラー箇所だけを修正すればよく、再入力の手間が減ります。
6. ポイントまとめ
- Controller側で
Request::validate()を使うと簡単にバリデーションを組み込める - バリデーションルールを組み合わせることで柔軟なチェックが可能
- バリデーション失敗時は自動でリダイレクトされ、エラーメッセージを表示できる
old()関数と組み合わせて入力値を保持するとユーザー体験が向上する
これらのポイントを押さえることで、Laravelで安全で使いやすいフォームを作成できます。