Laravelでフォームを作る基本の方法(Blade + POSTリクエスト)
生徒
「Laravelでフォームを作りたいんですけど、どうやって始めればいいですか?」
先生
「まずはBladeテンプレートでフォームを作り、POSTリクエストを使ってデータを送信する基本を理解しましょう。」
生徒
「Bladeテンプレートって何ですか?」
先生
「BladeはLaravelのテンプレートエンジンで、HTMLにPHPコードを書きやすくしたものです。簡単に変数の埋め込みや条件分岐、ループ処理ができます。」
生徒
「なるほど。それで、POSTリクエストって何ですか?」
先生
「POSTリクエストは、ユーザーがフォームに入力したデータをサーバーに送信する方法です。GETリクエストと違ってURLにデータが表示されず、安全にデータを送れます。」
1. ルートとコントローラを準備しよう
まずはフォームを表示するルートと、送信データを受け取るルートを作ります。Laravelではroutes/web.phpにルートを定義します。
use App\Http\Controllers\FormController;
Route::get('/contact', [FormController::class, 'showForm']);
Route::post('/contact', [FormController::class, 'submitForm']);
次にコントローラを作ります。ターミナルで以下のコマンドを実行します。
php artisan make:controller FormController
作成したコントローラにフォーム表示と送信処理のメソッドを追加します。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class FormController extends Controller
{
public function showForm()
{
return view('contact');
}
public function submitForm(Request $request)
{
$data = $request->all();
// データを処理(例:DB保存やメール送信)
return 'フォームが送信されました: ' . json_encode($data);
}
}
2. Bladeテンプレートでフォームを作る
フォームはresources/views/contact.blade.phpに作成します。POSTリクエストで送信する場合、@csrfを必ず入れます。これはCSRF(クロスサイトリクエストフォージェリ)対策用のトークンです。
<form action="/contact" method="POST">
@csrf
<div>
<label for="name">名前:</label>
<input type="text" id="name" name="name">
</div>
<div>
<label for="email">メールアドレス:</label>
<input type="email" id="email" name="email">
</div>
<div>
<label for="message">メッセージ:</label>
<textarea id="message" name="message"></textarea>
</div>
<button type="submit">送信</button>
</form>
3. 入力データを取得して処理する
送信されたデータはコントローラのRequestオブジェクトから取得できます。$request->all()で全データを取得し、個別に取り出すことも可能です。
public function submitForm(Request $request)
{
$name = $request->input('name');
$email = $request->input('email');
$message = $request->input('message');
// ここでDBに保存したりメール送信したりできます
return "こんにちは、{$name}さん。送信完了しました。";
}
4. フォームバリデーションの基本
フォーム入力時に必須チェックや形式チェックを行いたい場合は、Laravelのバリデーション機能を使います。$request->validate()で簡単にチェックできます。
public function submitForm(Request $request)
{
$validated = $request->validate([
'name' => 'required|max:50',
'email' => 'required|email',
'message' => 'required',
]);
return "バリデーション通過しました: " . json_encode($validated);
}
バリデーションに失敗した場合、自動的に元のフォームにリダイレクトされ、エラーメッセージが表示されます。
5. まとめずに次のステップに進むポイント
この基本を理解すれば、Laravelでフォームを簡単に作り、POSTリクエストでデータを受け取れるようになります。Bladeテンプレート、CSRFトークン、コントローラのRequestオブジェクトを組み合わせることが重要です。