内容
- Laravelでのミドルウェア設定方法についての簡単なまとめ
- 具体的なミドルウェアの処理の実装に関しては記載しておりません。
環境
- macOS Mojave 10.14.6
- Laravel Framework 5.8.33
Middlewareとは
- ミドルウェアではユーザーからのHTTPリクエストに対して処理の前後に加えたい処理を挿入することができる。
- その前後の処理をそれぞれBefore MiddlewareとAfter Middlewareといい、レンダリングされるまでの入口と出口でミドルウェアを通ることになる。そのBeforeとAfterの書き分けはMiddlewareクラス内で行う。
Middlewareクラスの生成
Middlewareクラスの生成はLaravelのプロジェクトのディレクトリまで移動し次のコマンドを実行する
今回はSampleというクラス名のMiddlewareを生成することにする
$ php artisan make:middleware {クラス名}
// Sampleというクラス名の場合
$ php artisan make:middleware Sample
-
app/Http/Middleware/
下にSmaple.phpが生成される - 生成されたMiddlewareクラス内にある
handle()
に実装内容を追記していく-
$response = $next($request);
の前に実装内容を記載するか、後に記載するかでBefore Middlewareかafter Middlewareかを書き分ける事ができる
-
ミドルウェアの登録
Before MiddlewareもしくはAfter Middlewareの実装が完了したミドルウェアを実際に通すようにするにはKarnel.phpへ追記する
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,
...
];
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
...
],
'api' => [
'throttle:60,1',
'auth:api',
...
],
];
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
...
];
protected $middlewarePriority = [
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\Authenticate::class,
...
];
}
$middleware(グローバルミドルウェア)
- アプリケーションの全HTTPリクエストで実行したいミドルウェアを書く
$middlewareGroups(ミドルウェアグループ)
- 複数のミドルウェアをまとめて登録
- 短縮キーを指定して、より多くのミドルウェアをグループとして登録する
$routeMiddleware(ルートミドルウェア)
- ミドルウェアを個々に登録
- 短縮キーを指定して通したいミドルウェアを書く
$middlewarePriority
- 特定の順番でミドルウェアの実行をする必要がある場合に、記載順でミドルウェアが優先して実行される
- グローバルミドルウェアではないものを記載する。
-
$middlewareGroups
や$routeMiddleware
に登録したもので最優先にしたいものをこちらにも書いておく
routeに対してミドルウェアを割り当てる
$middlewareGroupsを割り当てる
$middlewareGroups
でwebをkeyとして登録し、それを割り当てる場合
/route/web.php
// 1つのルートに対してミドルウェアを指定する場合
Route::get('/', function () {
//
})->middleware('web');
// 複数のルートに対してミドルウェアを指定する場合
Route::group(['middleware' => ['web']], function () {
//
});
$routeMiddlewareを割り当てる
$routeMiddleware
にauthというミドルウェアを登録し、それを割り当てる場合
/route/web.php
// 一つのルートに対してミドルウェアを指定する場合
Route::get('/', function () {
//
})->middleware('auth');
// 1つのルートに対して複数のミドルウェアを指定する場合
Route::get('/', function () {
//
})->middleware('auth', 'auth2');
// 複数のルートに対して1つのミドルウェアを指定する場合
Route::group(['middleware' => 'auth'], function () {
//
});
// 複数のルートに対して複数のミドルウェアを指定する場合
Route::group(['middleware' => ['auth', 'auth2'], function () {
//
});
参考
https://readouble.com/laravel/5.8/ja/middleware.html
https://www.ritolab.com/entry/69