همه چیز در مورد Middleware در لاراول 11

Middleware در لاراول یکی از ابزارهای قدرتمند برای کنترل جریان درخواست‌ها در برنامه است. در لاراول 11، با تغییرات جدید در ساختار فایل‌ها و روش مدیریت Middleware، توسعه‌دهندگان می‌توانند به صورت مدرن‌تر و ساده‌تر از این قابلیت استفاده کنند. در این مقاله، تمام مفاهیم، کاربردها، نحوه پیاده‌سازی، و نکات پیشرفته مرتبط با Middleware در لاراول 11 را بررسی می‌کنیم.


Middleware چیست؟

Middleware لایه‌ای میانی در چرخه پردازش درخواست‌ها و پاسخ‌ها (Request Lifecycle) است که عملیات خاصی را قبل یا بعد از پردازش درخواست‌ها انجام می‌دهد. این ابزار به شما کمک می کند کنترل بیشتری بر جریان داده‌ها در برنامه داشته باشید.

کاربردهای معمول Middleware:

  1. احراز هویت (Authentication)
  2. مجوزدهی کاربران (Authorization)
  3. حفاظت از حملات CSRF
  4. ثبت لاگ درخواست‌ها
  5. مدیریت نرخ درخواست‌ها (Rate Limiting)

تغییرات در Middleware در لاراول 11

در نسخه 11، لاراول ساختار مدیریت Middleware‌ها را بهبود بخشیده است. اکنون تنظیمات Middleware به فایل اصلی bootstrap/app.php منتقل شده‌اند و به جای فایل Kernel.php، مدیریت آن‌ها در یک ساختار مدرن و متمرکز انجام می‌شود.

ساختار فایل app.php

این فایل اکنون نقطه مرکزی برای پیکربندی برنامه است. به کمک متد withMiddleware می‌توانید Middleware‌ها را اضافه، گروه‌بندی یا تنظیم کنید.

نمونه ساختار فایل:

<?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) {
        $middleware->append(\App\Http\Middleware\CustomMiddleware::class);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        // مدیریت استثنائات
    })
    ->create();

نحوه ساخت Middleware سفارشی

برای ایجاد Middleware جدید در لاراول 11، از دستور زیر استفاده کنید:

php artisan make:middleware CheckAge

این دستور Middleware جدیدی در مسیر app/Http/Middleware ایجاد می‌کند. به عنوان مثال، فرض کنید می‌خواهید کاربران زیر ۱۸ سال به یک مسیر دسترسی نداشته باشند. کد Middleware به صورت زیر خواهد بود:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckAge
{
    public function handle(Request $request, Closure $next)
    {
        if ($request->age < 18) {
            return redirect('home');
        }

        return $next($request);
    }
}

اضافه کردن Middleware به app.php

بعد از ساخت Middleware، باید آن را به فایل app.php اضافه کنید:

->withMiddleware(function (Middleware $middleware) {
    $middleware->append(\App\Http\Middleware\CheckAge::class);
})

مدیریت گروه‌های Middleware

لاراول 11 امکان تعریف و مدیریت گروه‌های Middleware را در فایل app.php فراهم کرده است. این گروه‌ها برای اعمال مجموعه‌ای از Middlewareها روی مسیرهای خاص استفاده می‌شوند.

تعریف گروه:

->withMiddleware(function (Middleware $middleware) {
    $middleware->group('api', [
        \App\Http\Middleware\Authenticate::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ]);
})

استفاده از گروه:

بعد از تعریف گروه، می‌توانید آن را در فایل مسیرها استفاده کنید:

Route::middleware('api')->group(function () {
    Route::get('/posts', [PostController::class, 'index']);
});

نکات پیشرفته در Middleware لاراول 11

  1. استفاده از Closure‌ها به عنوان Middleware:
    اگر یک Middleware ساده دارید، می‌توانید از Closure‌ها به جای کلاس استفاده کنید:
Route::get('/example', function () {
    return 'Hello, world!';
})->middleware(function ($request, $next) {
    // منطق Middleware
    return $next($request);
});
  1. ارسال پارامتر به Middleware:
    می‌توانید به Middleware پارامتر ارسال کنید:
Route::get('/admin', function () {
    // صفحه ادمین
})->middleware('check.role:admin');


و در Middleware:

public function handle(Request $request, Closure $next, $role)
{
    if ($request->user()->role !== $role) {
        abort(403);
    }

    return $next($request);
}

تست Middleware‌ها

برای اطمینان از عملکرد صحیح Middleware، می‌توانید از تست‌های Unit استفاده کنید:

public function test_check_age_middleware()
{
    $response = $this->get('/profile?age=17');
    $response->assertRedirect('/home');
}

جمع‌بندی

Middleware در لاراول 11 با ساختاری مدرن و قابلیت‌های جدید مدیریت درخواست‌ها را آسان‌تر کرده است. با استفاده از این ابزار، می‌توانید برنامه‌ای ایمن‌تر، کارآمدتر و قابل نگهداری‌تر بسازید. به لطف تغییرات در فایل app.php، مدیریت Middleware اکنون متمرکزتر و شفاف‌تر از همیشه است.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *