【Laravel】コントローラーとは:Controllerの作成(コマンドや命名規則)

2024.01.13 /

【Laravel】コントローラーとは:Controllerの作成(コマンドや命名規則)

記事ではLaravelコントローラー(Controller)における、概要や作成方法(コマンド命名規則)などについて詳しく解説していきます。

LaravelのコントローラーはMVCモデルのC(Controller)に相当しており、モデルとビューの橋渡しを担っています。コントローラーは処理全体の制御を担当し、プログラムの本体といっても過言ではありません。

本記事を通して、Laravelのコントローラーについて理解を深めてください。

ここではLaravel 10を使用しています。

コントローラー(Controller)

コントローラーとは

Laravelにおけるコントローラーとはリクエストを受け付けてモデルとビューの仲介役を担当します。

Laravel:Lravelのフロー図

コントローラーはルーティング(ルーター)からユーザーのリクエストを受け取ります。リクエストの内容によってモデルからデータを取得し、ビューにデータを渡す役割を担います。

関連リンク:【Laravel】処理の流れ

コントローラーはMVCモデルのC(Controller)に相当し、アプリケーションのビジネスロジックを処理する重要な部分です。

MVCモデルとは

LaravelはMVCモデルと呼ばれる設計手法を採用しています。MVCモデルはモデル(Model)、ビュー(View)、コントローラー(Controller)の3つにアプリケーション開発で必要になる処理を分類します。これにより開発効率や保守性を高めています。

MVC 説明
モデル(Model) データベースとの架け橋。データにアクセスしてデータの取得・保存・削除を担っています。またデータを扱いやすい形に変換する役割もあります
ビュー(View) フロントサイドを作成(ユーザー側に表示される画面を作る)
コントローラー(Controller) ビューとモデルの仲介役。モデルからデータを取得し、ビューに渡したり、ビューから受け取ったデータをモデルに渡して処理させる

コントローラーのファイルは「app/Http/Controllers」の中に作成します。

コントローラーで実行される処理

コントローラーでは様々な処理が実行されます。以下に主な処理を記します。

  • リクエストの処理
  • データの取得、保存、更新、削除
  • レスポンスの生成

リクエストの処理

コントローラーはルーティング(ルーター)を通してユーザーからのHTTPリクエストを受け取ります。リクエストの内容に応じて処理を実行します。

データの取得、保存、更新、削除

コントローラーはモデルとやり取りを行い、データベースへのデータの保存や更新、削除、取得などの操作を行います。

Laravel用語の確認

モデルとはMVCモデルのM(Model)にあたり、データベースとアプリケーションの架け橋となる重要な機能です。モデルはテーブルの内容をクラスとして定義し、このクラスを利用してデータベース操作を可能にします。

レスポンスの生成

コントローラーで処理した結果からレスポンスをクライアント(ビュー)に返します。レスポンスにはJSONのレスポンスやリダイレクト、HTMLビューのレンダリングなどです。

コントローラーの命名規則

コントローラーの名前は命名規則に沿って作成します。通常はアッパーキャメルケースでコントローラー名を付けます。

アッパーキャメルケースとは最初の文字を大文字にして、かつ名前の区切り目部分も大文字にする方法です。例えば「BookController」のようにコントローラー名を付けるということです。

コントローラーの作成コマンド

コントローラーのファイルは以下構文に沿ってartisanコマンドを使うことで生成されます。

構文

php artisan make:controller コントローラー名

コントローラー名は命名規則に則って付けてください。例えばPostControllerを作る場合は以下コマンドを実行します。

php artisan make:controller Test/PostController

上記コマンドのAppはフォルダ名です。上記コマンドを実行すると
「app/Http/Controllers/Test/PostController.php」が作成されます。

このように専用のフォルダにコントローラーを入れたい場合は、コントローラー名の前にフォルダ名を付けましょう。

作成されたコントローラーファイルを開くと次のような中身となっています。

<?php

namespace App\Http\Controllers\Test;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class PostController extends Controller
{
    //
}

コントローラーにメソッドを定義する

コントローラーファイルのコントローラークラス内にリクエストを処理するメソッドを定義します。メソッドは一般的にCRUD操作(作成、読み取り、更新、削除)を表すメソッドを使います。

メソッド名 説明
index リストの表示など
create リソースを新規作成するフォームの表示
store リソースの保存
show 特定のリソースを表示
edit 特定のリソースを編集するフォームを表示
update 特定のリソースを更新
destroy 特定のリソースを削除

例えばPostControllerクラスにindexメソッドとshowメソッドを作成すると次のようになります。

use App\Models\Post;

class PostController extends Controller
{
    public function index(){
        $posts = Post::all();
        return view('index', compact('posts'));
    }

    public function show(string $id){
        $post = Post::findOrFail($id);
        return view('show', compact('post'));
    }
}

上記のようにコントローラークラス内にメソッドを定義してコントローラーファイルを作成していきます。

ルーティングの設定

コントローラーを作成したらそれに対応するルーティングも設定する必要があります。ルーティングはクライアントからのリクエストをどのコントローラー(メソッド)に処理させるかを指定します。

例えば今回作成したメソッドであれば以下のようにルーティング(web.php)を指定します。

Route::get('post', [PostController::class, 'index']);
Route::get('post/{id}', [PostController::class, 'show']);

またCRUD操作の一連のメソッドをすべて含むリソースコントローラーを以下artisanコマンドで作成することができます。

php artisan make:controller UserController --resource
Laravel用語の確認

リソースコントローラーとは特定のリソースに対するCRUD操作(作成、読み込み、更新、削除)の一覧のメソッドを初めから備えているコントローラーです

作成されたコントローラーファイルを開くと、以下のように一連のメソッドが最初から記述されています。

<?php

namespace App\Http\Controllers\Test;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class BookingController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(string $id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //
    }
}

リソースコントローラーを利用することでメソッドの記述が簡素化されます。