Help us understand the problem. What is going on with this article?

Laravel ミドルウェアの設定について

内容

  • Laravelでのミドルウェア設定方法についての簡単なまとめ
  • 具体的なミドルウェアの処理の実装に関しては記載しておりません。

環境

  • macOS Mojave 10.14.6
  • Laravel Framework 5.8.33

Middlewareとは

  • ミドルウェアではユーザーからのHTTPリクエストに対して処理の前後に加えたい処理を挿入することができる。
  • その前後の処理をそれぞれBefore MiddlewareAfter 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 Middlewareafter 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を割り当てる

$middlewareGroupswebkeyとして登録し、それを割り当てる場合

/route/web.php
// 1つのルートに対してミドルウェアを指定する場合
Route::get('/', function () {
    //
})->middleware('web');

// 複数のルートに対してミドルウェアを指定する場合
Route::group(['middleware' => ['web']], function () {
    //
});

$routeMiddlewareを割り当てる

$routeMiddlewareauthというミドルウェアを登録し、それを割り当てる場合

/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

KZ-taran
最近はReactばっかり触ってる。webGLも。Railsも。 あとLaravel, Vue少し。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした