【初心者】Laravelのミドルウェアって


はじめに

「Laravelのミドルウェアって何者?」というレベルの初学者が
ざっくり調べてざっくりまとめました。(Laravel6系です。)

ミドルウェアって

Laravelにおけるミドルウェアは、コントローラークラスの処理前後に位置し、主にHTTPリクエストのフィルタリングやHTTPレスポンスの変更を担う。認証やCSRF保護などのミドルウェアが用意されていてapp/Http/Middlewareディレクトリに設置されている。

そして、ミドルウェアは自作できる..!!

作成手順 (Laravel6)

1.artisanコマンドでミドルウェアクラスを作成
2.ミドルウェアクラスの編集
3.ミドルウェアクラスの登録

1.artisanコマンドでミドルウェアクラスを作成

php artisan make:middleware HogeMiddleware

このコマンドを実行するとapp/Http/Middleware/HogeMiddleware.phpが生成される。

2.ミドルウェアクラスの編集

生成されたHogeMiddleware.phpは下記のようになっているので、
handle()の中に処理を書いていく。

app/Http/Middleware/HogeMiddleware.php
<?php
namespace App\Http\Middleware;

use Closure;

class HogeMiddleware {

  public function handle($request, Closure $next)
  {
    //処理を記述

    return $next($request);
  }
}

3.ミドルウェアクラスの登録

作成したミドルウェアクラスを使うには、Kernel.phpに記述する必要がある。
一部省略しているがKernel.phpはデフォルトでは下記のようになっている。先ほど作成したHogeMiddlewareクラスを$middle内に追加した。

app/Http/Kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\HogeMiddleware::class,   //こんな感じに追加
        ...
    ];

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            ...
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ...
    ];

    protected $middlewarePriority = [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\Authenticate::class,
        ...
    ];
}

$middleware

全ての処理に対して必ず実行される。

$middlewareGroups

配列として、グループ名とその配列の中にグループ化したいミドルウェアを登録していく。
デフォルトでwebとapiが設定されている。webミドルウェアグループはroute/web.php内の処理に対して実行される。(RouteServiceProviderで設定できるらしい)

$routeMiddleware

あらかじめキーを割り当てておくことで、RouteやControllerで簡単に使うことができる。

Route::get('admin/profile', function () {
  //処理
})->middleware('auth');

$middlewarePriority

ミドルウェアの優先度を指定できる。

参考:
https://laravel.com/docs/6.x/middleware
https://qiita.com/kurikazu/items/0c57f050f5dfef02b23e

これで、リクエスト時やレスポンス時にフィルタリングの機能を使うことができる..!!