
コンニチハ
パンに塗り塗りジャム太郎です!
今回のテーマは「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はフォーム処理がとてもシンプルに書けるので、ぜひ色々応用してみてください!
では、また次の記事で〜