LaravelのViewについて、とくにミドルウェアについて
Contents
ミドルウェアとは
リクエストを受け取ると、コントローラ処理の前後に割り込み、独自の処理を追加する仕組み。
アクションの処理が行われる前後に、指定の処理を実行。

ミドルウェアの種類は3種類
ミドルウェアは3種類存在する。
- 単体のミドルウェア
- グローバルミドルウェア
- グループのミドルウェア
3種類を順に説明していく。
①単体のミドルウェア
まずは単体のミドルウェアについて。
ミドルウェア作成コマンド
ミドルウェアの作成コマンドは下記
php artisan make:middleware ◯◯Middleware
〇〇は任意
ミドルウェアの配置場所
上記コマンドで作成したミドルウェアは下記の場所に配置される
app → Http → Middleware
作成初期のミドルウェアの状態は下記(HelloMiddlewareという名前で作成)
<?php
namespace App\Http\Middleware;
use Closure;
class HelloMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
ミドルウェアの登録
ミドルウェアは作っただけでは動かない。登録作業が必要。
ミドルウェアの登録のために編集するファイルは「kernel.php」。
app → Http → Kernel.php
「$routeMiddleware」の変数に、作ったミドルウェアを登録する一行を追加する。
追記の書式は下記。
'hello' => \App\Http\Middleware\HelloMiddleware::class,
◯◯MiddleWareとして作成した〇〇の部分をキーにして、ミドルウェアのクラスを指定する。
実際に追記した画像は下記

これで利用可能になる
ミドルウェアの実行
作成したミドルウェアを実行するためには、ミドルウェアを呼び出す処理を記述する必要がある。
これは、ルーティングの際に実行するのが一般的。
すなわち編集ファイルは「web.php」。
下記は「helloMiddleware」を呼び出す例
Route::get('hello', 'HelloController@index')
->middleware(helloMiddleware::class);
ルーティング処理の記述の後に、メソッドチェーン(->)で、middlewareメソッドを書く。
引数は利用するミドルウェアのクラス。
これで/helloでミドルウェアが動くようになる。
ちなみにこのメソッドチェーンは連続して書くことができる。
コントローラの前後に処理をする【リクエストとレスポンスから理解する】
ミドルウェアはコントローラ処理の前後に割り込むと言った。この前後とは何だろう。
これを理解するには、ミドルウェアのhandleメソッド記述内、$next()メソッドの呼び出し位置が鍵。
public function handle($request, Closure $next){
return $next($request); //このメソッド
}
$next()メソッドとは、web.phpで記述した、コントローラのアクションメソッドを呼びだすメソッド
Route::get('hello', 'HelloController@index') //$nextによって、このindexが呼ばれる
->middleware(helloMiddleware::class);
この$nextでリクエストを送る前なのか、後なのかで、前処理か、後処理か、という使い分けをしている。
$nextを実行するの前になんらかの処理を記述するのが、前処理
public function handle($request, Closure $next)
{
//&nextより前に処理を記述(前処理)
return $next($request);
}
まず$nextを実行しレスポンスを保持しておいて、その後になんらかの処理を記述するのが後処理。
public function handle($request, Closure $next)
{
//まずnextを実行、結果を保持
$request = $next($request)
//後処理
return $request;
}
②グローバルミドルウェア
ミドルウェア2つめ。グローバルミドルウェア。
グローバルミドルウェアは登録しておくと、すべてのリクエストに対して自動的に呼び出されるミドルウェア。
登録
登録は「Kernel.php」。
app→Http→Kernel.php
「$middleware」の変数に、作ったミドルウェアを登録する一行を追加する。
単体のミドルウェアの登録時と同じく、一行追加して登録する
通常、ミドルウェアはルーティングファイルにある、個々のルーティングに、メソッドチェーンを書いて呼び出していた。
Route::get('hello', 'HelloController@index')
->middleware(helloMiddleware::class); //単体のミドルウェアは、メソッドチェーンで呼び出す
しかし、グローバルミドルウェアに登録されているミドルウェアは、明示的に呼び出す記述がなくても、すべてのリクエストに対して呼び出される。つまり、共通のミドルウェアならグローバルにしといた方が、楽。
③ミドルウェアグループ
3つ目は、ミドルウェアグループ。
ミドルウェアグループは、複数のミドルウェアをまとめたグループのこと。
ミドルウェアグループを呼び出すようにしておくと、アクセスがあった場合、
グループに登録してあるミドルウェアがすべて呼び出される。
登録
登録は「Kernel.php」。
app→Http→Kernel.php
「$middlewareGroups」の変数に、キーがグループ名、値に個々のミドルウェアクラスを指定して登録する。

呼び出し方
単体のミドルウェアを呼び出す時と同様、web.phpから、メソッドチェーンでmiddlewareメソッドを実行し、呼び出す。
Route::get('hello', 'HelloController@index')
->middleware(‘グループ名’);
個々のミドルウェアのときはクラス名で指定していたのに対し、
グループミドルウェアの場合、「グループ名」を指定する