0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LaravelのController入門:MVCをつなぐ仕組み

Last updated at Posted at 2025-10-22

はじめに

前回までの記事では、LaravelのMVCモデルのうち

  • Model:データを扱う部分
  • View:画面を表示する部分
    を学んできました。

今回はその2つをつなぐ司令塔である Controller を解説します。

Controllerはユーザーからのリクエストを受け取り、必要な処理を行って結果を返す役割を担っています。
MVCの中でも、アプリ全体の流れを整理する重要な役割です。

Controllerの基本的な役割

Controllerは、ユーザーの操作(リクエスト)に応じて適切な処理を実行し、ModelやViewを呼び出す「橋渡し役」です。

[ユーザーの操作]
      ↓
    [Route]
      ↓
 [Controller]
   ↙       ↘
[Model]    [View]

リクエストを受け取る

必要なデータをModelから取得する

結果をViewに渡して表示する

この流れを整理することで、処理の見通しが格段に良くなります。

Controllerの作成と基本構造

作成コマンド

php artisan make:controller PostController

これで app/Http/Controllers/PostController.php が作成されます。

基本構成例

namespace App\Http\Controllers;

use App\Models\Post;

class PostController extends Controller
{
    // 投稿一覧
    public function index()
    {
        $posts = Post::all();
        return view('posts.index', compact('posts'));
    }

    // 投稿詳細
    public function show($id)
    {
        $post = Post::findOrFail($id);
        return view('posts.show', compact('post'));
    }
}
  • index():一覧表示
  • show():詳細表示

Controllerでは「どのデータをどの画面に渡すか」を明示するのが基本です。

Routingとの関係

ControllerはRoutingと密接に関係しています。
RoutingでURLとControllerメソッドを紐づけることで、Webアプリの操作が成り立ちます。

ルート定義例

use App\Http\Controllers\PostController;

Route::get('/posts', [PostController::class, 'index'])->name('posts.index');
Route::get('/posts/{id}', [PostController::class, 'show'])->name('posts.show');
  • /posts にアクセス → PostController@index が実行
  • /posts/1 にアクセス → PostController@show が実行

ルートに name() を付けておくと、ViewからURLを安全に生成できます。

<a href="{{ route('posts.show', $post) }}">{{ $post->title }}</a>

フォーム送信とController

前回(View編)で紹介したフォームを、Controllerで受け取る例を見てみましょう。

View側(posts/create.blade.php

<form action="{{ route('posts.store') }}" method="POST">
    @csrf
    <label>タイトル</label>
    <input type="text" name="title" value="{{ old('title') }}">
    <label>本文</label>
    <textarea name="body">{{ old('body') }}</textarea>
    <button type="submit">保存</button>
</form>

Controller側(PostController.php

use Illuminate\Http\Request;

public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|max:100',
        'body'  => 'nullable|string',
    ]);

    Post::create($validated);

    return redirect()->route('posts.index')->with('status', '投稿を作成しました!');
}
  • $request … ユーザーの入力データを受け取る
  • $request->validate() … バリデーション(入力チェック)を実行
  • 成功時はリダイレクトし、フラッシュメッセージを設定

バリデーションの基本

Controllerはフォーム入力をチェックし、問題があればユーザーにエラーメッセージを返します。

ルールの書き方

$request->validate([
    'title' => 'required|max:100',
    'body'  => 'nullable|string',
]);

エラー表示(View側)

@error('title')
  <p style="color:red;">{{ $message }}</p>
@enderror

バリデーションエラー時は自動で前のページにリダイレクトし、入力値は old() で保持されます。

RESTfulなController設計

Controllerは1つのリソースに対して一定のメソッド構成を持つのが一般的です。

メソッド HTTP動詞 役割
index GET 一覧表示
show GET 詳細表示
create GET 新規作成フォーム表示
store POST 新規登録
edit GET 編集フォーム表示
update PUT/PATCH 更新処理
destroy DELETE 削除処理

artisanコマンドで一括生成

php artisan make:controller PostController --resource

resourceルートでまとめて登録

Route::resource('posts', PostController::class);

これだけで上表のルートを自動登録できます。

大規模開発では、RESTful構成を基本にするとチームでの分担やAPI化もスムーズになります。

まとめ

  • Controllerは「リクエストを受け取り、ModelとViewをつなぐ司令塔
  • Laravelでは make:controller コマンドで簡単に作成できる
  • フォーム送信やバリデーションを通じて、アプリ全体の流れを制御する役割を担う

🎉これで、LaravelのMVCシリーズ全4部が完結です🎉

MVCの仕組みを理解することで、Laravelの内部構造やアプリ開発の流れが一気に見通しやすくなります。
ぜひ今回学んだ内容をもとに、今後のアプリ開発に活かしてください!

宣伝

くすりの窓口ではエンジニアを積極採用中です!
ご興味のある方は下記リンクよりお問い合わせください!

学生向け

中途向け

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?