本連載ではPHPフレームワークのひとつであるLaravelを紹介していきます。Laravelは、「Web職人のためのフレームワーク」というキャッチコピーのもと、ここ数年で人気がうなぎ上りのフレームワークです。連載を通して、その人気の秘密を味わっていただこうと思います。第3回である前回は、Laravelで本格的なHTML画面を表示させるための仕組みである、テンプレートエンジンBladeを紹介しました。今回は、コントローラクラスを扱います。コントローラクラスを導入すると、ルーティング登録のコールバック関数中に記述した処理コードを別のクラスにまとめることができます。
シングルアクションコントローラ
実際にコントローラクラスを作成する前に、これまでのサンプルにおける、問題点の確認から始めることにします。
コントローラクラスとは
前回まで紹介してきたサンプルは、全ての処理をルーティング登録のコールバック関数内に記述してきました。記述したコードはあくまでサンプルなので、大した量ではありません。それでも、web.phpは肥大化していきます。ましてや、実際のアプリとなると、処理コードの量はサンプルの比ではなく、web.phpに記述しているとメンテナンス性が著しく低下します。
そこで、コールバック関数内に記述していた処理コードを別のクラスとして独立させ、ルーティング登録とは別に管理できる仕組みがLaravelには備わっています。この処理コードを記述したクラスのことを「コントローラクラス」と言います。
[Note]MVCのC
システムやアプリの設計を語ろうとした時によく出てくる言葉に、MVCモデルがあります。かなり昔から使われているモデルなので、ご存じの方も多いと思います。これは、Model、View、Controllerの頭文字をとったものです。MVCをきっちり説明しようとすると、それだけで連載となってしまう内容なので、ここでは簡易的に、以下のようにとらえてください。
- Model:データ処理を担う部分。
- View:画面表示処理を担う部分。
- Controller:MやVの制御を行いながら中心となる処理を担う部分。
実は、前回紹介したBladeは、LaravelにおけるVと言えます。一方、今回紹介するコントローラクラスは、その名称が示す通り、Cと言えるでしょう。今後の連載中にデータベースとのやり取りの方法を紹介する予定です。これが、Mにあたります。
1処理1クラスのコントローラ
それでは、実際にコントローラクラスの作り方を紹介していきます。ここでは、まず、前回、画面に「こんにちは! 武者小路さん!」を表示させたリスト3の処理をクラス化してみましょう。
Laravelでは、コントローラクラスはapp/Http/Controllersディレクトリに作成する約束になっているので、このディレクトリ内にリスト1のHelloBladeWithDataController.phpファイルを作成してください。
<?php
namespace App\Http\Controllers; // (1)
use App\Http\Controllers\Controller; // (2)
class HelloBladeWithDataController extends Controller // (3)
{
public function __invoke() // (4)
{
$data["name"] = "武者小路"; // (5)
return view("helloWithData", $data); // (5)
}
}
コントローラクラスを作成する場合、先述の通り、
app/Http/Controllers
とディレクトリ内に作成する必要があります。それに伴い、クラスの名前空間もこのディレクトリに合わせ、
\App\Http\Controllers
とする必要があります。それを記述しているのが(1)です。
また、必須ではありませんが、このコントローラクラスは、以下のクラスを継承した方が、便利なことが多いです。
App\Http\Controllers\Controller
こうすることで、ミドルウェアの登録メソッドであるmiddleware()やバリデーションを設定するvalidate()メソッドなど、便利なメソッドが使えるようになります。なお、ミドルウェアは次回紹介します。また、バリデーションもこの連載中で扱っていきます。
便利になるようにControllerクラスを継承する形で記述したのがリスト1の(3)であり、事前にこのクラスを利用できるようにuse宣言しているのが(2)です。
さて、こうして作成したコントローラクラスに、実際に処理を記述していきます。それは、PHPのマジックメソッドである__invoke()に記述します。それが、リスト1の(4)であり、実際の処理が(5)です。(5)は前回のリスト3のコールバック関数内に記述したものと全く同じです。
なお、__invoke()メソッドとは、PHPオブジェクトを関数のように扱えるメソッドのことです。詳細は割愛しますが、より詳しい解説は、拙記事「PHPの「マジックメソッド」とは――「__set()」「__get()」「__invoke()」の使い方」を参照してください。
以上で、コントローラクラスの作成が完了しました。この__invoke()メソッドを利用したコントローラクラスのことを、「シングルアクションコントローラ」と言います。なぜ「シングル」かは後述します。
シングルアクションコントローラのルーティング登録
次に、作成したシングルアクションコントローラクラスをルーティング登録し、実際に表示させましょう。リスト1のコントローラクラスをルーティング登録するには、リスト2のコードになります。
Route::get("/chap4/helloBladeWithData", "HelloBladeWithDataController");
ルート登録メソッドの第2引数に、コールバック関数の代わりにリスト1で作成したコントローラクラスのクラス名文字列を記述するだけです。
実際に、以下のURLにアクセスしてみます。
- http://localhost/firstlaravel/public/chap4/helloBladeWithData
すると、前回の図3と同じ図1の画面が表示され、無事、コントローラクラスで処理が行われたのがわかります。
この記事は参考になりましたか?
- 人気のPHPフレームワークLaravelを習得しよう連載記事一覧
- この記事の著者
-
WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
