【Laravel入門】初心者向け!フォームからデータ登録の実践

LaravelはPHPの中でも最も人気の高いフレームワークの一つで、開発効率の高さと便利な機能の豊富さから、初心者から上級者まで幅広く利用されています。
特にWebアプリケーションでは「フォームを通じてユーザーからデータを入力してもらい、それをデータベースに保存して表示する」という流れが基本中の基本です。
今回は、その「フォームからデータを登録する方法」をステップごとに丁寧に解説していきます。すでに「DB接続」「マイグレーション」「データ表示」は終わっている前提で進めますので、これからフォーム実装を学びたい方にピッタリです。


フォーム実装の全体像

まず、Laravelでフォームからデータを登録する流れを全体的に理解しておきましょう。大きく分けると以下のステップになります。

  • Bladeテンプレートでフォームを作成する
  • ルーティングでフォーム送信先を設定する
  • コントローラーでリクエストを処理する
  • バリデーションで入力チェックを行う
  • データベースに保存する
  • 保存されたデータを表示する
💡 今回は「記事投稿アプリ」を例にして、タイトルと本文をフォームから投稿できるようにしていきます。

Bladeでフォームを作成する

まずは入力フォームを作ります。ファイルは resources/views/articles/create.blade.php に配置しましょう。

<form action="{{ route('articles.store') }}" method="POST">
  @csrf

  <div style="margin-bottom:10px;">
    <label>タイトル</label><br>
    <input type="text" name="title" value="{{ old('title') }}" 
           style="width:100%; padding:8px; border:1px solid #ccc; border-radius:4px;">
    @error('title')
      <span style="color:red;">{{ $message }}</span>
    @enderror
  </div>

  <div style="margin-bottom:10px;">
    <label>本文</label><br>
    <textarea name="body" rows="5" 
              style="width:100%; padding:8px; border:1px solid #ccc; border-radius:4px;">{{ old('body') }}</textarea>
    @error('body')
      <span style="color:red;">{{ $message }}</span>
    @enderror
  </div>

  <button type="submit" 
          style="background:#2f96b4; color:#fff; padding:10px 15px; border:none; border-radius:4px;">
    投稿する
  </button>
</form>

ここでポイントとなるのが @csrf です。これはクロスサイトリクエストフォージェリ(CSRF)攻撃を防ぐためのトークンを埋め込む仕組みで、Laravelでフォームを作る際は必須となります。
また @error ディレクティブを使うことで、バリデーションエラー時にエラーメッセージを表示できます。


コントローラーを作成する

次に、フォームから送信されたデータを処理するコントローラーを用意します。以下のコマンドでコントローラーを作成します。

php artisan make:controller ArticleController

作成された app/Http/Controllers/ArticleController.php に処理を記述します。

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

class ArticleController extends Controller
{
    public function create()
    {
        return view('articles.create');
    }

    public function store(Request $request)
    {
        // バリデーション
        $request->validate([
            'title' => 'required|max:255',
            'body'  => 'required'
        ]);

        // データ保存
        Article::create([
            'title' => $request->title,
            'body'  => $request->body
        ]);

        return redirect()->route('articles.index')
                         ->with('success', '記事を投稿しました!');
    }
}

ここでは validate メソッドで入力チェックを行い、問題がなければEloquent ORMを使ってデータベースに保存しています。


ルーティングを設定する

次に、フォームとコントローラーをつなぐルーティングを routes/web.php に記述します。

use App\Http\Controllers\ArticleController;

Route::get('/articles/create', [ArticleController::class, 'create'])->name('articles.create');
Route::post('/articles', [ArticleController::class, 'store'])->name('articles.store');
Route::get('/articles', [ArticleController::class, 'index'])->name('articles.index');

これで /articles/create にアクセスするとフォームが表示され、投稿すると store メソッドが実行されます。


バリデーションを理解する

$request->validate() を利用すると、Laravelが入力内容を自動でチェックし、失敗した場合は元のフォームにリダイレクトしてくれます。
例えば「タイトルを必須にしたい場合」は 'title' => 'required' と指定します。

その他の例:

  • 'email' => 'required|email' : メール形式をチェック
  • 'password' => 'required|min:8' : 8文字以上のパスワードを必須に
  • 'image' => 'nullable|image' : 画像ファイルなら許可
⚠️ バリデーションはアプリの信頼性を守る非常に大切な処理です。必ず設定するようにしましょう。

「入力エラー」で悩まない!Laravelのフォームバリデーションを完全マスタ…

「入力エラー」で悩まない!Laravelのフォームバリデーションを完全マスタ…

Laravel初心者必見!フォーム入力エラーを防ぐバリデーションの基礎から日本語化まで徹底解説。ルーティングとの関係や実例コード付きで安心して学べます。

Laravel初心者必見!フォーム入力エラーを防ぐバリデーションの基礎から日本語化まで徹底解説。ルーティングとの関係や実例コード付きで安心して学べます。


データを表示する

保存したデータを表示するために、コントローラーに index メソッドを追加します。

public function index()
{
    $articles = Article::latest()->get();
    return view('articles.index', compact('articles'));
}

そして、表示用のBladeファイル resources/views/articles/index.blade.php を作成します。

<h2>記事一覧</h2>

@if (session('success'))
  <div style="background:#dff0d8; padding:10px; margin-bottom:15px; border:1px solid #d6e9c6; border-radius:4px;">
    {{ session('success') }}
  </div>
@endif

<table border="1" cellpadding="8" cellspacing="0" 
       style="width:100%; border-collapse:collapse; font-size:14px;">
  <thead style="background:#eee;">
    <tr>
      <th>タイトル</th>
      <th>本文</th>
      <th>投稿日</th>
    </tr>
  </thead>
  <tbody>
    @foreach ($articles as $article)
      <tr>
        <td>{{ $article->title }}</td>
        <td>{{ $article->body }}</td>
        <td>{{ $article->created_at }}</td>
      </tr>
    @endforeach
  </tbody>
</table>

独習PHP 第4版 [ 山田 祥寛 ]

価格:3740円
(2025/9/10 15:20時点)
感想(2件)


まとめ

今回は、Laravelで「フォームからデータを登録して表示する」方法を解説しました。流れを整理すると次のようになります。

  • Bladeテンプレートでフォームを作成する
  • ルーティングでフォーム送信先を設定する
  • コントローラーでバリデーションと保存処理を行う
  • データベースに保存する
  • 一覧画面で表示する

フォーム実装はLaravel開発の基礎スキルです。一度流れを押さえてしまえば、ユーザー登録フォームやコメント投稿フォームなど、応用範囲は無限に広がります。ぜひ実際に手を動かして、自分のアプリケーションに組み込んでみてください。

🎉 お疲れさまでした!これでLaravel初心者でも「フォームからデータを登録して表示する仕組み」が理解できたはずです。