0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHP備忘録:Laravelでのフォーム入力からバリデーション、データベース保存までの流れをまとめてみた

Posted at

はじめに

Docker上でLaravel環境を構築し、メッセージ投稿フォームの作成を通じて基本的なMVC(Model-View-Controller)構成の流れを理解する学習を行いました。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

書こうと思ったきっかけ

個人的にPHPのキャッチアップをしたくて、Laravelを使った実践を通じて、フォーム入力 → バリデーション → データベース保存という一連の流れを学びたかったためです。完全に初学者としての備忘録となります。

内容

環境

  • Laravel を Docker コンテナ上に構築
  • php-app, mysql, phpmyadmin の3つのサービスで構成

コントローラーの作成

docker compose exec php-app php artisan make:controller MessageController

コントローラーの中身(重複定義の修正も含む)

<?php

namespace App\Http\Controllers;

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

class MessageController extends Controller
{
    public function create()
    {
        return view('message.create');
    }

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

        Message::create($validated);

        return redirect('/message')->with('success', '保存しました!');
    }
}

モデルの作成と設定

docker compose exec php-app php artisan make:model Message -m

Messageモデルでは、$fillable に name, message を指定:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Message extends Model
{
    // 保存を許可するカラムを指定
    protected $fillable = ['name', 'message'];
}

マイグレーションとDB作成

docker compose exec php-app php artisan migrate

ビューの作成

resources/views/message/create.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 action="/message" method="POST">
        @csrf
        <label>名前: <input type="text" name="name" required></label><br><br>
        <label>メッセージ:<br><textarea name="message" rows="5" cols="40" required></textarea></label><br><br>
        <button type="submit">送信</button>
    </form>
</body>
</html>

ルーティング

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HelloController;
use App\Http\Controllers\MessageController;

Route::get('/', function () {
    return view('welcome');
});

// Hello関連
Route::get('/hello', [HelloController::class, 'index']);
Route::post('/hello', [HelloController::class, 'post']);

// Message関連
Route::get('/message', [MessageController::class, 'create']);
Route::post('/message', [MessageController::class, 'store']);

まとめ

Laravelでの基本的なフォーム処理とDB保存までの流れを、一通り経験できました。

MessageControllerの重複定義エラーや BindingResolutionException によるつまづきもありましたが、クラス定義の整理と composer dump-autoload によるオートロードの修正で解決できました。

Docker環境との連携も含めて、今後のLaravel開発に向けての土台が少し見えてきました...!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?