(Laravel) ビュー【ミドルウェアの使い方】

laravel-middle-ware

 

LaravelのViewについて、とくにミドルウェアについて

 

ミドルウェアとは

リクエストを受け取ると、コントローラ処理の前後に割り込み、独自の処理を追加する仕組み。
アクションの処理が行われる前後に、指定の処理を実行。

laravel-middleware-image

ミドルウェアの種類は3種類

ミドルウェアは3種類存在する。

 

ミドルウェア3種類
  1. 単体のミドルウェア
  2. グローバルミドルウェア
  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として作成した〇〇の部分をキーにして、ミドルウェアのクラスを指定する。

実際に追記した画像は下記

middleware-regist

これで利用可能になる

 

ミドルウェアの実行

作成したミドルウェアを実行するためには、ミドルウェアを呼び出す処理を記述する必要がある。
これは、ルーティングの際に実行するのが一般的。
すなわち編集ファイルは「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」の変数に、キーがグループ名、値に個々のミドルウェアクラスを指定して登録する。

group-middleware

 

呼び出し方

単体のミドルウェアを呼び出す時と同様、web.phpから、メソッドチェーンでmiddlewareメソッドを実行し、呼び出す。

Route::get('hello', 'HelloController@index')
     ->middleware(‘グループ名’);

 

個々のミドルウェアのときはクラス名で指定していたのに対し、
グループミドルウェアの場合、「グループ名」を指定する

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。