Laravelでフォームテンプレートを作成する方法(@csrf, old関数の活用)
生徒
「Laravelでフォームを作るとき、どうやって安全にデータを送ったり、前の入力を残したりできるんですか?」
先生
「フォームを安全に送るためには、@csrfという特別な仕組みを使います。また、ユーザーが間違えた時に、前に入力した内容を残すにはold関数を使うんですよ。」
生徒
「えーっと、@csrfとold関数って何ですか?具体的にどう使うんでしょう?」
先生
「それでは、Laravelのフォームテンプレートでの使い方を一緒に見ていきましょう!」
1. フォームとは?
ウェブサイトでよくある「入力フォーム」は、名前やメールアドレスなどの情報をユーザーから受け取る場所です。
例えば、お問い合わせフォームや会員登録フォームなどです。
Laravelでは、このフォームをBladeテンプレートで簡単に作れます。
2. @csrf(シーエスアールエフ)とは?
インターネット上のフォームは、悪意のある攻撃(CSRF攻撃)から守る必要があります。
CSRF攻撃とは、第三者が勝手にフォームを送信させる攻撃のことです。@csrfは、Laravelが用意したセキュリティの仕組みで、フォームに特別な「トークン(印)」を埋め込み、正しいユーザーからの送信かどうかをチェックします。
フォームタグの中に必ず@csrfを書くことで、このセキュリティ対策ができます。
<form method="POST" action="/submit">
@csrf
<!-- 入力欄など -->
</form>
もし@csrfを入れ忘れると、フォーム送信がエラーになるので必ず書きましょう。
3. old関数とは?
フォームを送信したあとに入力ミスがあった場合、画面を再表示して「どこが間違っていたか」教えてくれます。
その時に、もう一度最初から全部入力するのは大変ですよね。old関数は、前に入力した値をフォームの中に戻してあげるためのLaravelの便利な機能です。
これでユーザーは、間違った部分だけを修正すれば良くなります。
4. フォームテンプレートの作成例
では、実際に名前を入力するフォームをBladeテンプレートで作ってみましょう。
<form method="POST" action="/submit">
@csrf
<label for="name">名前:</label>
<input type="text" id="name" name="name" value="{{ old('name') }}">
<button type="submit">送信</button>
</form>
ポイントは、@csrfを入れていることと、value="{{ old('name') }}"の部分です。
このold('name')が、前回入力した名前をフォームに戻しています。
5. old関数の動きのイメージ
フォームを送信して、もし入力ミスがあれば、Laravelは自動で前回の入力値を保持してくれます。
そのため、old('name')はその値を呼び出して画面にセットします。
これにより、ユーザーは名前欄に再入力しなくて済みます。
6. 覚えておきたい大切なこと
@csrfはフォームを安全に送るための必須のタグ。必ずフォーム内に書く。old関数は、入力ミス時に前回入力した値をフォームに戻す便利な機能。- フォームのタグのvalue属性に
{{ old('name') }}のように書くことで使える。 - Laravelのフォーム処理でユーザーの使いやすさを大きく向上させる大切なポイント。
まとめ
Laravelでフォームテンプレートを作成する際に欠かせない@csrfとold関数は、安全性と使いやすさを両立するための重要な仕組みです。今回の記事では、フォームを安全に送信するためのCSRFトークンの意味、そしてユーザーが再入力の手間なくフォームを利用できるようにするold関数の働きについて、初心者でも理解しやすい形で詳しく学びました。
まず、@csrfはLaravelが提供する自動的なセキュリティ機能であり、外部からの不正アクセスを防ぐ「見えない盾」として動作します。これをフォーム内に書くだけで、アプリケーションはCSRF攻撃から守られます。特に、ログインフォームやお問い合わせフォームのような重要な入力欄を扱う場合には、安全性を確保する意味でも必ず使用すべき構文です。
一方のold関数は、ユーザー体験を大幅に向上させる機能であり、入力内容に誤りがあった際に「前回入力した情報を保持できる」という大きなメリットがあります。例えば、名前やメールアドレス、住所など複数の項目を入力するフォームでは、ミスした部分だけを修正すればよく、全体を再入力する必要がありません。これは、ユーザーにとって大きなストレス軽減につながります。
また、Laravelはバリデーションとold関数を自動で連携してくれるため、開発者はBlade側にvalue="{{ old('項目名') }}"と書くだけで簡単に実装できます。バリデーションエラーが発生したときに入力値を保つ仕組みが最初から整っている点は、Laravelの強力な利点のひとつといえます。
さらに、@csrfとold関数は単体で使うだけでなく、バリデーションエラー表示(@error)、フォーム構造の分割(@include)、レイアウトの再利用(@extends)などと組み合わせることで、開発効率とユーザー体験をさらに高められます。これらを適切に活用することで、シンプルなフォームから本格的な登録機能まで、自信を持って設計できるようになります。
以下では、フォーム処理に関連する大切なポイントを再確認し、実践で役立つサンプルコードも紹介します。
実践で役立つフォームテンプレート例
バリデーション・エラー表示と組み合わせたフォームの実践例です。
<form method="POST" action="/register">
@csrf
<div class="mb-3">
<label for="name" class="form-label">名前</label>
<input type="text" id="name" name="name"
class="form-control @error('name') is-invalid @enderror"
value="{{ old('name') }}">
@error('name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="mb-3">
<label for="email" class="form-label">メールアドレス</label>
<input type="email" id="email" name="email"
class="form-control @error('email') is-invalid @enderror"
value="{{ old('email') }}">
@error('email')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<button type="submit" class="btn btn-primary">登録</button>
</form>
この例では、@csrf・old()・@errorを組み合わせて、実際のWebアプリに近いフォームの作り方を確認できます。間違いがあったときはエラー表示とともに入力が保持されるため、使いやすいフォームが自然に作れることが分かります。
生徒
「@csrfを入れるだけで安全になるなんて便利ですね!毎回自分で仕組みを作らなくてもいいんだ。」
先生
「Laravelが自動でトークンを発行してくれるから、安全なフォーム送信を簡単に実装できますよ。」
生徒
「old関数もとても役に立ちますね。大きなフォームほど再入力しないで済むのはありがたいです!」
先生
「ユーザー体験を高めるうえで欠かせない機能ですね。Laravelのフォーム処理は細かいところまで配慮されています。」
生徒
「これで実際に自分のアプリにもフォームを自信をもって作れそうです!」
先生
「ぜひ実践してみてください。フォームはLaravelアプリ開発の基本であり、とても大切な技術ですよ。」