Laravel - クラス・ミドルウェア - ミドルウェアグループ


クラウディア 


1. 概要
2. Laravel 10.* 以前
3. Laravel 11.* 以降
4. わたしはこう書いた

1. 概要

 前ページに加えて、さらに知らんのですが。  ミドルウェアグループなるものもあるらしい。  本ページは、下記のサイトを参考にさせていただきました。
12.x ミドルウェア Laravel」
「Laravel11 以降のミドルウェアの設定の書き方
 まだ(2025年4月17日)よう知らんので、本ページは、ほぼ、参考サイトのパクリです。

2. Laravel 10.* 以前

 「Laravel Framework 10.48.29」では。

app/Http/Kernel.php
 に下記のように記述されています。

    /**
     * The application's route middleware groups.
     *
     * @var array<string, array<int, class-string|string>>
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
 32~39行の間または41~45の間に、行を加えることにより、グループミドルウェアを追加できるようです。

3. Laravel 11.* 以降

 前ページと同様。

bootstrap/app.php
 に記述するらしい。  「Laravel Framework 12.9.2」だと、下記のようになっています。

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();
 参考サイトによれば。

use App\Http\Middleware\AAA;
use App\Http\Middleware\BBB;

->withMiddleware(function (Middleware $middleware) {
    // webミドルウェアグループの最後に追加
    $middleware->group('web2' [
        AAA::class,
        BBB::class,
    ]);
})
 てな感じで追加するらしい。  これも、参考サイトの通りにはいかず、次項に述べますが・・・。

4. わたしはこう書いた

 「Laravel Framework 10.48.29」では。

app/Http/Kernel.php
 に。

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array<int, class-string|string>
     */
    protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,

		・・・	略	・・・
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array<string, array<int, class-string|string>>
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,

		・・・	略	・・・
        ],

        'api' => [
            \Illuminate\Routing\Middleware\SubstituteBindings::class,

		・・・	略	・・・
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array<string, class-string|string>
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,

		・・・	略	・・・
    ];
}
 と書いていたものを「Laravel Framework 12.9.2」では。

bootstrap/app.php
 に、下記のように書いて、うまくいきました。

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
		$middleware->alias([
			'auth' => \App\Http\Middleware\Authenticate::class,

			・・・	略	・・・
		]);

		$middleware->use([
			\App\Http\Middleware\TrustProxies::class,

			・・・	略	・・・
		]);

		$middleware->appendToGroup('web', [
           	\App\Http\Middleware\EncryptCookies::class,

			・・・	略	・・・
		]);

		$middleware->appendToGroup('api', [
            \Illuminate\Routing\Middleware\SubstituteBindings::class,

			・・・	略	・・・
		]);
    })

    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

AbemaTV 無料体験
Amazonギフトカード