カテゴリ: Laravel 更新日: 2026/04/10

Laravelでフォームを作る基本の方法(Blade + POSTリクエスト)

Laravelでフォームを作る基本の方法(Blade + POSTリクエスト)
Laravelでフォームを作る基本の方法(Blade + POSTリクエスト)

先生と生徒の会話形式で理解しよう

生徒

「Laravelでフォームを作りたいんですけど、どうやって始めればいいですか?」

先生

「まずはBladeテンプレートでフォームを作り、POSTリクエストを使ってデータを送信する基本を理解しましょう。」

生徒

「Bladeテンプレートって何ですか?」

先生

「BladeはLaravelのテンプレートエンジンで、HTMLにPHPコードを書きやすくしたものです。簡単に変数の埋め込みや条件分岐、ループ処理ができます。」

生徒

「なるほど。それで、POSTリクエストって何ですか?」

先生

「POSTリクエストは、ユーザーがフォームに入力したデータをサーバーに送信する方法です。GETリクエストと違ってURLにデータが表示されず、安全にデータを送れます。」

1. ルートとコントローラを準備しよう

1. ルートとコントローラを準備しよう
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テンプレートでフォームを作る

2. Bladeテンプレートでフォームを作る
2. Bladeテンプレートでフォームを作る

データの受け皿(コントローラ)ができたら、次はユーザーが情報を入力する「見た目」の部分、Bladeテンプレートを作成しましょう。作成場所はresources/views/contact.blade.phpです。

Laravelでフォームを作成する際、最も重要なのが@csrfという記述です。これは「クロスサイト・リクエスト・フォージェリ」という攻撃からサイトを守るためのセキュリティ対策で、これがないとLaravelは安全のためにデータを書き換える処理を拒否してしまいます。初心者が一番つまずきやすいポイントなので、必ず入れる癖をつけましょう。

以下は、名前、メールアドレス、メッセージを入力するためのシンプルなフォームの例です。HTMLに慣れていない方でも、各inputタグのname属性が、後ほどコントローラでデータを取り出す際の「キー(名前)」になることだけ意識しておけば大丈夫です。


<form action="/contact" method="POST">
    @csrf

    <div class="mb-3">
        <label for="name" class="form-label">名前:</label>
        <input type="text" id="name" name="name" class="form-control" placeholder="山田 太郎">
    </div>

    <div class="mb-3">
        <label for="email" class="form-label">メールアドレス:</label>
        <input type="email" id="email" name="email" class="form-control" placeholder="example@test.com">
    </div>

    <div class="mb-3">
        <label for="message" class="form-label">メッセージ:</label>
        <textarea id="message" name="message" class="form-control" rows="3"></textarea>
    </div>

    <button type="submit" class="btn btn-primary">送信する</button>
</form>

ポイント: name="name"name="email" という属性が、サーバー側でデータを受け取る際の識別票になります。ここを間違えると、せっかく入力したデータが迷子になってしまうので注意しましょう。これで、ブラウザからデータを送る準備が整いました。

3. 入力データを取得して処理する

3. 入力データを取得して処理する
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. フォームバリデーションの基本

4. フォームバリデーションの基本
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. まとめずに次のステップに進むポイント

5. まとめずに次のステップに進むポイント
5. まとめずに次のステップに進むポイント

この基本を理解すれば、Laravelでフォームを簡単に作り、POSTリクエストでデータを受け取れるようになります。Bladeテンプレート、CSRFトークン、コントローラのRequestオブジェクトを組み合わせることが重要です。

カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.6
Java&Spring記事人気No6
Laravel
LaravelでRemember Me(ログイン状態保持)機能を実装する方法を完全解説!初心者でも安心の認証入門
No.7
Java&Spring記事人気No7
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.8
Java&Spring記事人気No8
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点