本連載ではPHPフレームワークのひとつであるLaravelを紹介していきます。Laravelは、「Web職人のためのフレームワーク」というキャッチコピーのもと、ここ数年で人気がうなぎ上りのフレームワークです。連載を通して、その人気の秘密を味わっていただこうと思います。第4回である前回は、リクエスト処理をコールバック関数ではなく1つのクラスにまとめる方法として、コントローラクラスを紹介しました。今回は、そのリクエスト処理の前後に処理を挿入できるミドルウェアを紹介します。
ミドルウェアとは
ミドルウェアとは何かを解説する題材として、「あるURLでのリクエスト処理に対しては、常に接続元のIPアドレスを記録しておく」といった仕様を考えてみます。
例えば、システムの管理者のみが実行できる機能が/management/以下のURLパターンにまとまっているとします。例として、そのシステムを利用するユーザを追加する機能のURLだと、/management/users/addUserといったものが考えられます。これらの/management/以下のURLにアクセスしてきた場合は、常に接続元のIPアドレスをDBに記録するようにします。
その場合、どのようなソースコードが考えられるでしょうか。これは、以下のように、このURLパターンを登録したルーティングコールバック関数内の最初にその記録処理を記述するものです。
Route::post("/management/users/addUser", function() {
ここにIPアドレスの記録処理を記述
:
});
あるいは、前回解説したコントローラクラスを使用するならば、以下のように該当するメソッドの最初に同じように記述します。
class UsersController extends Controller
{
public function addUser()
{
ここにIPアドレスの記録処理を記述
:
}
:
}
とはいえ、該当するすべてのコールバック関数やコントローラクラスメソッドに同じ処理を記述するのは効率が悪いので、通常は、IPアドレスの記録処理を行う関数、あるいはメソッドを作成して、それを呼び出すコードを記述します。すると例えば、以下のコードとなります。
class UsersController extends Controller
{
public function addUser()
{
Functions::recordIPAddress(…);
:
}
:
}
ここで呼び出しているrecordIPAddress()は、Functionsクラスに記述されたIPアドレスの記録処理メソッドです。これで、比較的メンテナンスしやすいコードになります。それでも、この1行を、該当するすべてのコントローラクラスメソッドに記述する必要があり、記述し忘れるとそれはバグとなります。
このように、コールバック関数やコントローラクラスメソッドに記述する本来の処理(リクエスト処理)に先んじて何か定型的な処理を行う必要があるケースは、Webアプリ、Webシステムではよくあることです。こういった時に活用できる機能として、Laravelにはミドルウェアがあります。ミドルウェアは、リクエスト処理の前後に処理を挿入できる機能です(図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編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
