【超入門】Laravelでお問い合わせフォームを5分で作成する方法!

コンニチハ

パンに塗り塗りジャム太郎です!

今回のテーマは「Laravelのお問い合わせフォーム」についてです。


1.はじめに

LaravelはPHPの人気フレームワークで、フォームの作成やデータ送信もシンプルに行えます。今回は、簡単なお問い合わせフォームを作成し、サーバーにデータを送信する流れを一緒に見ていきましょう。


2.事前準備

以下の環境が整っていることを前提に進めます。

  • Laravel 10 がインストール済み
  • データベース(例:MySQL)接続設定済み

もしまだの場合は、laravel new (プロジェクト名)で新規プロジェクトを作成しておきましょう。


3.マイグレーションの作成

まずは、送信されたデータを保存するためのテーブルを作ります。

php artisan make:migration create_contacts_table

マイグレーションファイルを編集します:

public function up(): void
{
    Schema::create('contacts', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email');
        $table->text('message');
        $table->timestamps();
    });
}

マイグレーションを実行します:

php artisan migrate

※もし、環境で分けている場合の例:

php artisan migrate --env=development

4.モデルの作成

php artisan make:model Contact

作成されたapp/Models/Contact.phpはそのままでOKです。


5.ルーティングの作成

routes/web.phpに以下を追加します。

use App\Http\Controllers\ContactController;

Route::get('/contact', [ContactController::class, 'create']);
Route::post('/contact', [ContactController::class, 'store']);

6.コントローラの作成

php artisan make:controller ContactController

app/Http/Controllers/ContactController.phpを以下のように編集します。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Contact;

class ContactController extends Controller
{
    public function create()
    {
        return view('contact');
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required',
            'email' => 'required|email',
            'message' => 'required',
        ]);

        Contact::create($validated);

        return redirect('/contact')->with('success', 'お問い合わせを送信しました!');
    }
}

Contact::create()を使うには、モデルにfillableを追加しておきます。

protected $fillable = ['name', 'email', 'message'];

7.ビューの作成

resources/views/contact.blade.phpを作成します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>お問い合わせフォーム</title>
</head>
<body>
    <h1>お問い合わせフォーム</h1>

    @if (session('success'))
        <p style="color: green;">{{ session('success') }}</p>
    @endif

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

        <div>
            <label>名前:</label><br>
            <input type="text" name="name" value="{{ old('name') }}">
            @error('name')<p style="color: red;">{{ $message }}</p>@enderror
        </div>

        <div>
            <label>メールアドレス:</label><br>
            <input type="email" name="email" value="{{ old('email') }}">
            @error('email')<p style="color: red;">{{ $message }}</p>@enderror
        </div>

        <div>
            <label>メッセージ:</label><br>
            <textarea name="message">{{ old('message') }}</textarea>
            @error('message')<p style="color: red;">{{ $message }}</p>@enderror
        </div>

        <button type="submit">送信</button>
    </form>
</body>
</html>

8.まとめ

今回のポイントをおさらいします。

  • マイグレーションでテーブルを用意
  • コントローラでバリデーション&保存
  • Bladeでフォーム作成&エラーメッセージ表示

Laravelはフォーム処理がとてもシンプルに書けるので、ぜひ色々応用してみてください!


では、また次の記事で〜

投稿者 パンに塗り塗りジャム太郎

コンニチハ! Z世代のパンに塗り塗りジャム太郎です。 Web系自社開発企業でポンコツエンジニアをしております。 このブログでは最低1人にでもタメになってくれたらいいなぁ〜ぐらいの内容を発信しています。 お手柔らかによろしくお願いいたします。