117
82

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 5 years have passed since last update.

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

Last updated at Posted at 2019-09-05

内容

  • 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

117
82
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
117
82

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?