Laravel

Laravel11でミドルウェアグループを使う方法

本サイトの記事内にアフィリエイト広告が含まれる場合があります。

Laravel11でミドルウェアグループを使う方法のサムネイル画像

awayuki

音大出身。学生時代はフリーランスでWEB制作・開発しながら、2社で長期エンジニアインターンを経験しました(2年半)。 23卒で、自社開発ベンチャー企業に入社しエンジニア・デザイナーとして働き、2024年1月起業しました! このブログでは、ブログ開設方法・プログラミング・音大からエンジニアになれた方法など書いています。 お仕事依頼はお問い合わせフォームからお問い合わせお願いします。 Zenn

Laravel 11では、bootstrap/app.php ファイルを使用してミドルウェアグループにミドルウェアを追加する新しい方法が導入されています。

この方法を使うことで、アプリケーションの起動時にミドルウェアグループを簡単に設定できます。

今回はこの実装方法について解説します!

著:加藤じゅんこ
¥3,000 (2024/11/28 11:54時点 | Amazon調べ)

ミドルウェアグループとは?

ミドルウェアグループとは、複数のミドルウェアを一つのグループにまとめて、それをルートやルートグループに適用するための機能です。

これにより、複数のルートで共通のミドルウェアのセットを簡単に再利用することができます。

ミドルウェアグループの利点

  1. 整理と管理の簡素化:
    • 同じミドルウェアセットを複数のルートに適用する必要がある場合、それぞれのルートにミドルウェアを個別に指定する代わりに、一つのグループ名を指定するだけで済みます。
  2. 設定の一元化:
    • ミドルウェアの変更が必要になった場合、グループ定義を更新するだけで、関連するすべてのルートに対する変更が適用されます。
  3. 適用の柔軟性:
    • ミドルウェアグループは、特定のルートやルートグループに対して柔軟に適用することができ、状況に応じてミドルウェアを簡単に追加または削除することが可能です。

ミドルウェアを作って実践してみる

今回作る、ミドルウェアの仕様は以下になります。(ご自身のアプリケーション要件に合わせて内容は変えてください)

  • 運営側から認証されたユーザーかどうかというのを判定し、認証されていなかったら申請ページにリダイレクトする

ミドルウェアの作成

コマンドを使って新しいミドルウェアを生成します。

php artisan make:middleware EnsureUserIsApproved

ミドルウェアの実装

生成されたミドルウェアファイルに以下のロジックを追加します。これはユーザーの承認ステータスをチェックし、未提出の場合は指定されたルートへリダイレクトします。

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use App\Models\User;

class EnsureUserIsApproved
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        $user = $request->user();
        if ($user && $user->approval_status === User::APPROVAL_STATUS_UNSUBMITTED) {
            return redirect()->route('user.application');
        }

        return $next($request);
    }
}

ミドルウェアグループにミドルウェアを追加する

bootstrap/app.php に記述していきます。

$app->withMiddleware() メソッドを使用して、必要なミドルウェアを特定のグループに追加します。

appendToGroup はグループの最後にミドルウェアを追加し、prependToGroup はグループの最初にミドルウェアを追加します。

今回は、approved という名前のミドルウェアグループを追加します。

$middleware->appendToGroup('approved', [
  EnsureUserIsApproved::class,
]);

全文は以下になります。

<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use App\Http\Middleware\EnsureUserIsApproved;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__ . '/../routes/web.php',
        commands: __DIR__ . '/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->web(append: [
            \App\Http\Middleware\HandleInertiaRequests::class,
            \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
        ]);

        $middleware->appendToGroup('approved', [
            EnsureUserIsApproved::class,
            // 他にミドルウェアがあれば追加
        ]);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

これでミドルウェアグループの追加が完了しました!

ミドルウェアグループを使う

ミドルウェアグループは、個々のミドルウェアと同じ構文を使用して、ルートとコントローラアクションに割り当てることができます。

Route::get('/', function () {
    // ...
})->middleware('group-name');
 
Route::middleware(['group-name'])->group(function () {
    // ...
});

今回作ったミドルウェアグループを使ってみます。

Route::middleware('auth', 'verified', 'approved')->group(function () {
  Route::get('/dashboard', [UserController::class, 'dashboard'])->name('dashboard');
});

これで、ミドルウェアグループが適用されました!🎉

参考

https://laravel.com/docs/11.x/middleware#middleware-groups

著:加藤じゅんこ
¥3,000 (2024/11/28 11:54時点 | Amazon調べ)
  • この記事を書いた人

awayuki

音大出身。学生時代はフリーランスでWEB制作・開発しながら、2社で長期エンジニアインターンを経験しました(2年半)。 23卒で、自社開発ベンチャー企業に入社しエンジニア・デザイナーとして働き、2024年1月起業しました! このブログでは、ブログ開設方法・プログラミング・音大からエンジニアになれた方法など書いています。 お仕事依頼はお問い合わせフォームからお問い合わせお願いします。 Zenn

-Laravel