6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-10-02

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

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

middleware.png

そして、ミドルウェアは自作できる..!!
##作成手順 (Laravel6)
1.artisanコマンドでミドルウェアクラスを作成
2.ミドルウェアクラスの編集
3.ミドルウェアクラスの登録

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

.php
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で簡単に使うことができる。

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

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

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

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

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?