Laravelで問い合わせフォームを作成する&DB作成方法

問い合わせフォームを作成

web.php

// コンタクトフォームページ
Route::get('/contact', function () {
    return view('contact');
});


use App\Http\Controllers\ContactController;

// コンタクトフォームのデータ送信を処理するルート
Route::post('/contact', [ContactController::class, 'store']);

contact.blade.php

<!-- resources/views/contact.blade.php -->

@extends('layouts.app')

@section('title', 'コンタクトフォーム')

@section('content')
    <h1>お問い合わせ</h1>
    
    <!-- 送信先を設定 -->
    <form method="POST" action="{{ url('/contact') }}">
        <!-- CSRFトークンを設定(セキュリティ対策) -->
        @csrf
        
        <!-- 名前入力フィールド -->
        <div>
            <label for="name">名前:</label>
            <input type="text" id="name" name="name" required>
        </div>
        
        <!-- メールアドレス入力フィールド -->
        <div>
            <label for="email">メールアドレス:</label>
            <input type="email" id="email" name="email" required>
        </div>
        
        <!-- メッセージ入力エリア -->
        <div>
            <label for="message">メッセージ:</label>
            <textarea id="message" name="message" required></textarea>
        </div>
        
        <!-- 送信ボタン -->
        <div>
            <button type="submit">送信</button>
        </div>
    </form>
@endsection

DBを作成

ターミナルを開き、マイグレーションファイルを作成(database/migrationsディレクトリに新しいマイグレーションファイルを生成)

php artisan make:migration create_contacts_table --create=contacts

生成されたマイグレーションファイルを開き、upメソッド内にテーブルのカラムを定義します。例えば、名前、メールアドレス、メッセージのカラムを追加するには、以下のように記述します。

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

ターミナルでマイグレーションを実行

php artisan migrate

モデル作成

Laravelでは、データベースのテーブルとやり取りするためにEloquent ORMを使用します。各テーブルは通常、対応する「モデル」によって表されます。

php artisan make:model Contact

このコマンドはapp/ModelsディレクトリにContactモデルを生成します。このモデルを使用して、データベースのcontactsテーブルに対してCRUD(作成、読み取り、更新、削除)操作を行うことができます。

モデルを使用したデータの保存

ContactController内で、フォームから送信されたデータをContactモデルを使用してデータベースに保存するには、以下のように記述します。

use App\Models\Contact;

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

    // モデルを使用してデータをデータベースに保存
    $contact = new Contact();
    $contact->name = $validated['name'];
    $contact->email = $validated['email'];
    $contact->message = $validated['message'];
    $contact->save();

    return redirect('/')->with('success', 'お問い合わせありがとうございます!');
}

このコードでは、まずフォームの入力をバリデーションし、その後新しいContactインスタンスを作成して、フォームからのデータを各属性に代入します。最後にsaveメソッドを呼び出して、これらのデータをデータベースに保存します。

以上の手順で、お問い合わせフォームからのデータを受け取り、バリデーションを行い、データベースに保存する流れが完成します。

この記事が気に入ったらサポートをしてみませんか?