スキル一覧に戻る
moonpixels

creating-middleware

by moonpixels

Laravel skeleton application template with Inertia React.

1🍴 0📅 2026年1月10日
GitHubで見るManusで実行

SKILL.md


name: creating-middleware description: Create Laravel HTTP middleware for request/response processing. Use when creating middleware, filtering requests, modifying responses, or when user mentions middleware, request filters, or HTTP processing.

Create Laravel Middleware

Create HTTP middleware for request/response processing, filtering, and modification. Middleware intercepts requests before they reach controllers, enabling cross-cutting concerns like authentication, locale setting, and response transformation.

File Structure

app/Http/Middleware/{Name}.php

Examples:

  • app/Http/Middleware/SetLocale.php
  • app/Http/Middleware/HandleInertiaRequests.php
  • app/Http/Middleware/EnsureUserIsAdmin.php

Core Conventions

1. Middleware Structure

<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

final class {Name}
{
    public function handle(Request $request, Closure $next): Response
    {
        // Before logic

        $response = $next($request);

        // After logic

        return $response;
    }
}

Key Requirements:

  • Always include declare(strict_types=1);
  • Use final class modifier
  • handle() method with Request, Closure, and Response types
  • Call $next($request) to continue pipeline
  • Return Response

2. Registration

Register in bootstrap/app.php:

->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'set.locale' => \App\Http\Middleware\SetLocale::class,
    ]);
})

Examples

Example 1: Request Modification

<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use App\Support\Localisation\Localisation;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

final class SetLocale
{
    public function __construct(
        private Localisation $localisation
    ) {}

    public function handle(Request $request, Closure $next): Response
    {
        $locale = $request->user()?->language
            ?? $this->localisation->getDefaultLocale();

        app()->setLocale($locale);

        return $next($request);
    }
}

Example 2: Response Modification (Inertia)

<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Inertia\Middleware;
use Symfony\Component\HttpFoundation\Response;

final class HandleInertiaRequests extends Middleware
{
    public function share(Request $request): array
    {
        return [
            ...parent::share($request),
            'auth' => [
                'user' => $request->user()
                    ? UserResource::make($request->user())
                    : null,
            ],
            'flash' => [
                'success' => $request->session()->get('success'),
                'error' => $request->session()->get('error'),
            ],
        ];
    }
}

Example 3: Authorization Check

<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

final class EnsureUserIsAdmin
{
    public function handle(Request $request, Closure $next): Response
    {
        if (! $request->user()?->isAdmin()) {
            abort(403, 'Access denied.');
        }

        return $next($request);
    }
}

Anti-Patterns

❌ Don't Do This

// Don't forget to call $next()
public function handle(Request $request, Closure $next): Response
{
    // Do something
    return response('Done'); // ❌ Must call $next()
}

// Don't put business logic here
public function handle(Request $request, Closure $next): Response
{
    User::create([...]); // ❌ Use Action in controller
    return $next($request);
}

// Don't skip type hints
public function handle($request, $next) // ❌ Type hint

✅ Do This Instead

// Always call $next()
public function handle(Request $request, Closure $next): Response
{
    $response = $next($request);
    return $response;
}

// Keep logic simple
public function handle(Request $request, Closure $next): Response
{
    if (! $request->user()) {
        return redirect('login');
    }
    return $next($request);
}

// Full type hints
public function handle(Request $request, Closure $next): Response

Quality Standards

  • All middleware must pass PHPStan level 8
  • 100% type coverage required
  • Code formatted with Pint
  • Refactored with Rector
  • Covered by feature tests

スコア

総合スコア

50/100

リポジトリの品質指標に基づく評価

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

レビュー

💬

レビュー機能は近日公開予定です