🔺 شرح Laravel

الوسائط (Middleware)

ما هو الـ Middleware؟

طبقة تصفية تعترض الطلب قبل وصوله للمتحكّم — للمصادقة، التسجيل، التحقّق. Laravel يأتي بوسائط جاهزة (مثل auth لحماية المسارات).

إنشاء وسيط

php artisan make:middleware CheckAge
<?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);   // تمرير للخطوة التالية
    }
}

⚠️ يجب استدعاء $next($request) لتمرير الطلب، وإلا توقّفت السلسلة.

تطبيقه على مسار

<?php
Route::get('/profile', function () {
    // ...
})->middleware('auth');

// عدّة وسائط
Route::get('/admin', [AdminController::class, 'index'])
    ->middleware(['auth', 'verified']);

مجموعات المسارات

تطبيق وسيط على عدّة مسارات معًا:

<?php
Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index']);
    Route::get('/settings', [SettingsController::class, 'index']);
});

وسائط جاهزة شائعة

الوسيطالوظيفة
authيتطلّب تسجيل دخول
guestللزوّار غير المسجّلين فقط
verifiedبريد مُفعَّل
throttleتحديد معدّل الطلبات

قبل أم بعد؟

<?php
public function handle(Request $request, Closure $next)
{
    // كود قبل المتحكّم

    $response = $next($request);

    // كود بعد المتحكّم (قبل إرسال الرد)

    return $response;
}

أخطاء شائعة

  • نسيان return $next($request) فلا يصل الطلب للمتحكّم أبدًا.
  • نسيان تسجيل الوسيط قبل استخدامه باسم مختصر.

🎯 التالي: الطلب والاستجابة (Request & Response).