更新:2024/12/02

【Laravel】コントローラ(Controller)の使い方と意味について

はるか
はるか
コントローラ…ユーザーのリクエストを処理するクラス。LaravelではMVCの「C」。
ふゅか
ふゅか
なるほど!例えば、ユーザーが「商品一覧を見たい」ってリクエストすると、コントローラがデータベースから商品情報を取ってきてくれるのね!

1. コントローラとは?

コントローラは、ユーザーのリクエストを受け取り、そのリクエストに応じて適切な処理を行う役割を持つクラスです。Laravelでは「Model-View-Controller (MVC)」アーキテクチャに基づいており、コントローラはその「C」に該当します。

1.1. 簡単な例

  • ユーザーがWebサイトで「商品一覧」を見たい。
  • コントローラがそのリクエストを受け取り、データベースから商品情報を取得。
  • ビューを使って、商品一覧をWebページとして表示。

本記事では、Laravel10を利用して、Controllerの使い方についてわかりやすく解説します。

2. コントローラを作成する方法

Laravelでは、artisanコマンドを使用して簡単にコントローラを作成できます。

2.1. コマンド

php artisan make:controller SampleController

上記のコマンドを実行すると、app/Http/ControllersディレクトリにSampleController.phpというファイルが生成されます。

はるか
はるか
コントローラはコマンドで作れる。
ふゅか
ふゅか
わぁ!コマンド一つで作れるのね!app/Http/Controllersに作成されるみたい。

2.2. コントローラの基本構造

以下は、生成されたコントローラの基本的な構造です。ここにindexメソッドを追加しました。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SampleController extends Controller
{
    // メソッドの例
    public function index()
    {
        return "Hello, Laravel Controller!";
    }
}

3. ルーティングとコントローラの関連付け

作成したコントローラを利用するには、ルートで設定を行う必要があります。

3.1. ルート設定

routes/web.phpに以下を追加します。

use App\Http\Controllers\SampleController;

Route::get('/sample', [SampleController::class, 'index']);

 

3.2. 各部分

  • Route::get
    • HTTPのGETリクエストを処理します。たとえば、ユーザーがブラウザで/sampleにアクセスしたときにこのルートが動作します。

  • SampleController::class
    • 作成したコントローラを指定します。この例ではSampleControllerが使用されています。
  • index
    • 指定したコントローラ内で実行するメソッド名です。この例では、SampleControllerindexメソッドが呼び出されます。

4. リクエストデータを受け取る

コントローラでは、ユーザーから送信されたデータを処理することができます。以下にフォームから送信されたデータを受け取る方法を紹介します。

ふゅか
ふゅか
フォームからデータを送るのもコントローラが使えるって聞いたけど、どうやるの?
はるか
はるか
まずビューでフォームを作る。次にコントローラのstoreメソッドでリクエストを受け取る。

4.1. フォームの例

ビューを利用して、フォームを作成します。次のように、resources/views/index.blade.phpを作成します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <form action="{{route('sample.post')}}" method="POST">
        @csrf
        <input type="text" name="name" placeholder="名前を入力">
        <button type="submit">送信</button>
    </form>
</body>
</html>

4.2. リクエストデータの受け取り

コントローラを利用して、フォームから送信されたデータを取得して表示します。

    public function index() { 
        return view("index"); 
    }
    public function store(Request $request)
    {
        $name = $request->input('name');
        return "Hello, " . $name;
    }

先ほど作成した、SampleControllerにstoreメソッドを追加して、indexメソッドで先ほど作成したビューを表示できるように編集します。

4.3. web.phpの編集

storeメソッドに対応したルートを名前付きで追加します。

Route::post('/sample', [SampleController::class, 'store'])->name("sample.post");

4.4. 動作確認

先ほど作成したビューのページに移動します。ここで、名前を入力して、送信ボタンを押します。

送信ボタンを押すと、次のように表示されます。

PR