ما هو الـ 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).