ミドルウェアについて

2018/10/12

今回はミドルウェアについてエントリーします。

 

ミドルウェアについて

リクエスト時とかレスポンス時にフィルタリングとしての機能をミドルウェアといいます。

例えばログインしていないと実行出来ないように制限をかけたい場合(認証チェック)などでミドルウェアの機能を利用します。

 

ミドルウェアの作成手順

【1】artisanコマンドでミドルウェアのスケルトンを生成

【2】ミドルウェアの編集

【3】ミドルウェアの登録

【4】ミドルウェアの設定

 

【1】artisanコマンドでミドルウェアのスケルトンを生成

artisanコマンドでミドルウェアのスケルトンを生成することができます。

php artisan make:middleware MyMiddleware

上記のコマンドでapp/Http/Middleware/MyMiddleware.phpが生成されます。

ちなみにLaravel5.2ではデフォルトで4つのミドルウェアがすでに用意されています。

 

【2】ミドルウェアの編集

artisanコマンドで作成したミドルウェアのクラスにはhandleメソッドがあります。

ここでミドルウェアで処理をするプログラムを記載します。

構文

<?php
namespace App\Http\Middleware;

use Closure;

class MyMiddleware {

  public function handle($request, Closure $next)
  {
    // ここに処理を記述します。

    return $next($request); #(1)
  }

}
(1)アプリケーションを次に進めるには、$nextコールバックを呼び出します。

 

【3】ミドルウェアの登録

ミドルウェアを作っただけでは使えません。

/app/Http/Kernel.php でミドルウェアを登録する必要があります。

ミドルウェアを登録するポイントは3つあります。

・全ての処理に共通して処理を行う場合・・・$middleware に登録します。

・複数のミドルウェアをまとめて(グループ)登録する場合・・・$middlewareGroups に登録します。

・単体で使うミドルウェアを登録しておく場合・・・$routeMiddleware にキーと共に登録します。

 

全ての処理に共通して処理を行う場合

protected $middleware = [
  \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
  Middleware\OneMiddleware::class,
  Middleware\TwoMiddleware::class,
];
各ルートで呼ばれたときに実行されるミドルウェアをここで登録します。
ここで登録されたミドルウェアはRouterで指定などしなくても、どんな処理に対しても割り込んで追加処理を行います。

 

複数のミドルウェアをまとめて(グループ)登録する場合

protected $middlewareGroups = [
    'num' => [
      Middleware\ThreeMiddleware::class,
      Middleware\ForeMiddleware::class,
    ]
];
幾つかのミドルウェアはいくつか組み合わせて使われる場合があります。
この場合はKernelの$middlewareGroupsに名前をつけてまとめておくことができます。
この機能はLaravel5.2より使えるようになりました。

 

単体で使うミドルウェアを登録しておく場合

protected $routeMiddleware = [
  'five' => Middleware\FiveMiddleware::class,
  'six' => Middleware\SixMiddleware::class,
];

 

【4】ミドルウェアの設定

ミドルウェアの設定は主に二つやり方があります。

(1)ルーターでミドルウェアを使用する
(2)コントローラでミドルウェアを使用する

 

(1)ルーターでミドルウェアを使用する

ルータでミドルウェアを使用する場合は

1)普通に指定する
2)ミドルウェアを複数指定する
3)グループで指定する

の3つやり方があります。

1)普通に指定する
Route::get('admin/profile', ['middleware' => 'auth', function () {
  // 実行したい処理を記述
}]);
admin/profileのURLにアクセスするとミドルウェア'auth'が呼び出されます。

 

2)ミドルウェアを複数指定する
Route::get('/', ['middleware' => ['first', 'second'], function () {
  // 実行したい処理を記述
}]);

 

3)グループで指定する
<?php
Route::group(['middleware' => ['num']], function () {
    // 実行したい処理を記述
});

 

(2)コントローラでミドルウェアを使用する

<?php
namespace App\Http\Controllers;

...

class ArticlesController extends Controller {
  public function __construct()
  {
  $this->middleware('auth', ['except' => ['index', 'show']]);
  }
  ...
}
コンストラクタを追加して、その中でミドルウェアを使用するよう設定します。
ミドルウェアは$this->middleware()で実装できます。
オプション引数に’except’を指定して、ミドルウェアの対象からindexとshow を外しています。

Laravel5.2におけるミドルウェアについては以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-実践知識