【Laravel】ミドルウェア 復習

この記事は以下の書籍を参考にして執筆しました。

- [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)



#HelloMiddlewareクラス
artisanのmake:middlewareでHelloMiddlewareクラスを作成し中身を見てみる

##ミドルウェアの実行
###handleメソッド
```php5
    public function handle($request, Closure $next)
    {
       //実行する処理
    }
```
>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)

|引数|説明|
|---|---|
|$request|Requestインスタンスが渡される|
|Closure $next|クロージャ|

###$routeMiddlewareへ追記
実際の登録作業

```php5:app/Http/Kernel.php
'hello'=>\App\Http\Middleware\HelloMiddleware::class
```
>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)

###we.phpの修正
```php5:web.php
Route::get('アドレス','コントローラ名@アクションメソッド')->middleware(ミドルウェアクラス名::class)
```
>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


##前処理と後処理

###前処理
```php5
    public function handle($request, Closure $next)
    {
        //処理
        return $next($request);
    }
```
コントローラの前に実行する。
必要な処理をしてから$nextを実行してreturn
###後処理
```php5
    public function handle($request, Closure $next)
    {
        $response=$next($request)
        //処理
        return $response;
    }
```
>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)

コントローラを実行した後に実行する
$nextでレスポンスを受け取ってから処理をする。

#グローバルミドルウェア
`$middleware`に追記して登録すると、web.phpにmiddlewareメソッドを書かなくても常にミドルウェアが実行される。

```php5:web.php
Route::get('アドレス','コントローラ名@アクションメソッド')->middleware(ミドルウェアクラス名::class)

↓

Route::get('アドレス','コントローラ名@アクションメソッド')
```
#グループミドルウェア
```php5:Kernel.php
  
  protected $middlewareGroups=[
    'グループ名'=>[
      ミドルウェアクラス::class,
    ],
  ];
```
>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)

web.phpのmiddlewareメソッドの引数にグループ名を指定。

```php5:web.php
Route::get('アドレス','コントローラ名@アクションメソッド')->middleware('グループ名')
```
>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)