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 改訂版ーーゼロから作れる人になる! [ 谷藤賢一 ] 価格:2970円 |

まとめ
今回は、Laravelで「フォームからデータを登録して表示する」方法を解説しました。流れを整理すると次のようになります。
- Bladeテンプレートでフォームを作成する
- ルーティングでフォーム送信先を設定する
- コントローラーでバリデーションと保存処理を行う
- データベースに保存する
- 一覧画面で表示する
フォーム実装はLaravel開発の基礎スキルです。一度流れを押さえてしまえば、ユーザー登録フォームやコメント投稿フォームなど、応用範囲は無限に広がります。ぜひ実際に手を動かして、自分のアプリケーションに組み込んでみてください。