Laravelでフォームを作る基本の方法(Blade + POSTリクエスト)
生徒
「Laravelでフォームを作りたいんですけど、どうやって始めればいいですか?」
先生
「まずはBladeテンプレートでフォームを作り、POSTリクエストを使ってデータを送信する基本を理解しましょう。」
生徒
「Bladeテンプレートって何ですか?」
先生
「BladeはLaravelのテンプレートエンジンで、HTMLにPHPコードを書きやすくしたものです。簡単に変数の埋め込みや条件分岐、ループ処理ができます。」
生徒
「なるほど。それで、POSTリクエストって何ですか?」
先生
「POSTリクエストは、ユーザーがフォームに入力したデータをサーバーに送信する方法です。GETリクエストと違ってURLにデータが表示されず、安全にデータを送れます。」
1. ルートとコントローラを準備しよう
Laravelでフォーム機能を実装するには、まず「どのURLにアクセスしたら」「どのプログラム(コントローラ)を動かすか」という交通整理の設定が必要です。これをルーティングと呼びます。
まずは、ブラウザで表示するための設定と、送信ボタンを押した後の設定をroutes/web.phpに追記しましょう。
use App\Http\Controllers\FormController;
use Illuminate\Support\Facades\Route;
// フォームの画面を表示するためのルート(GETリクエスト)
Route::get('/contact', [FormController::class, 'showForm']);
// フォームのデータを受け取るためのルート(POSTリクエスト)
Route::post('/contact', [FormController::class, 'submitForm']);
次に、実際の処理を担当する「コントローラ」を作成します。Laravelでは、職人(Artisan)コマンドを使って雛形を自動生成するのが一般的です。ターミナル(WindowsならコマンドプロンプトやPowerShell)を開き、プロジェクトのフォルダで以下のコマンドを入力してください。
php artisan make:controller FormController
コマンドを実行すると、app/Http/Controllers/FormController.phpというファイルが作成されます。この中に、先ほどルートで指定した「表示用(showForm)」と「受信用(submitForm)」の2つの動きを書き込んでいきます。
namespace App\Http\Controllers;
// Requestクラスを読み込むことで、送信されたデータを取り扱えるようになります
use Illuminate\Http\Request;
class FormController extends Controller
{
// お問い合わせ画面(入力画面)を表示する魔法
public function showForm()
{
// resources/views/contact.blade.php を表示します
return view('contact');
}
// 送信されたデータを受け取って処理する魔法
public function submitForm(Request $request)
{
// $requestの中に、ユーザーが入力した「名前」や「メール」が全て入っています
$data = $request->all();
// 開発中は、このように中身をのぞいて確認してみましょう
return 'フォームから無事にデータが届きました:' . json_encode($data);
}
}
プログラミング未経験の方は、まず「GETは画面を見るため」「POSTはデータを送るため」という使い分けを意識するだけでOKです。これでデータの通り道が完成しました。
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オブジェクトを組み合わせることが重要です。