دليلك الشامل لعمل Middleware مخصص في لارافيل Laravel Middleware
بص يا سيدي، أكيد وأنت بتبني أي مشروع ويب باستخدام إطار العمل لارافيل (Laravel)، عدت عليك لحظة لقيت نفسك بتقول: "يا ريت كان فيه طريقة أتحكم بيها في الطلبات (Requests) قبل ما توصل للـ Controller". مثلاً عايز تتأكد إن اليوزر مسجل دخول، أو إن عنده صلاحية معينة (Authorization)، أو حتى بتفلتر طلبات جاية من مناطق جغرافية معينة. هنا بيجي دور الـ Middleware، اللي هو يعتبر "حارس البوابة" بتاع تطبيقك.
في المقال ده، هناخد الموضوع من الصفر لحد ما تبقى بروفيشنال في التعامل مع الـ Middleware، ونفهم إزاي نخصصه (Custom Middleware) عشان يناسب احتياجات مشروعنا.
Table of contents [Show]
يعني إيه Middleware أصلاً؟
ببساطة، الـ Middleware هو طبقة وسيطة بتترمي بين الطلب (HTTP Request) اللي بييجي من البراوزر، وبين الـ Route أو الـ Controller اللي بيعالج الطلب ده. هو عبارة عن كود بيشتغل قبل أو بعد تنفيذ الـ Request. فلو الشرط اللي حاطه في الـ Middleware متحققش، بنوقف الطلب وبنعمل له Redirect، ولو اتحقق، بنعدي الطلب يكمل طريقه عادي.
الخطوة الأولى: إنشاء الـ Middleware
لارافيل بيسهل علينا الدنيا جداً باستخدام الـ Artisan CLI. عشان تعمل Middleware جديد، افتح التيرمينال (Terminal) واكتب الأمر ده:
php artisan make:middleware CheckUserRoleبعد ما تنفذ الأمر ده، هتلاقي ملف جديد اتكريت عندك في المسار app/Http/Middleware. ده المكان اللي هنكتب فيه المنطق (Logic) بتاعنا.
كتابة منطق التحقق داخل الـ Middleware
دلوقتي افتح الملف اللي اتكريت، هتلاقي دالة (Method) اسمها handle. دي القلب بتاع الـ Middleware. خلينا نفترض إننا عايزين نتأكد إن اليوزر ده "أدمن" (Admin) قبل ما يدخل على صفحة الداشبورد:
public function handle($request, Closure $next, $role){ if ($request->user() && $request->user()->role !== $role) { return redirect('/home')->with('error', 'معندكش صلاحية دخول!'); } return $next($request);}هنا إحنا بنقول للـ Middleware: لو اليوزر مش واخد الرول اللي أنا باعتها، طلعه بره على صفحة الهوم، غير كده كمل الطريق عادي باستخدام $next($request).
الخطوة الثالثة: تسجيل الـ Middleware
عشان لارافيل يعرف إن فيه Middleware جديد، لازم نسجله في ملف bootstrap/app.php (في الإصدارات الحديثة من لارافيل 11). بتضيفه في جزء الـ withMiddleware زي كده:
->withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'role' => \App\Http\Middleware\CheckUserRole::class, ]);})الخطوة الرابعة: استخدام الـ Middleware في الـ Routes
دلوقتي جه وقت الاستخدام. تقدر تحط الـ Middleware بتاعك على أي Route أو مجموعة Routes (Route Group) بكل سهولة:
Route::get('/admin/dashboard', function () { // كود الداشبورد هنا})->middleware('role:admin');لاحظ إني مررت الـ admin كباراميتر (Parameter) للـ Middleware، ودي مرونة كبيرة جداً بتخليك تستخدم نفس الكود لأدوار مختلفة (محرر، كاتب، أدمن).
نصيحة من أخ لمبرمج
يا بطل، الـ Middleware أداة قوية جداً، بس متزودش فيها كتير من غير داعي. حاول دايماً تخلي الكود جوه الـ Middleware بسيط (Clean Code)، لأن أي تعقيد هنا هيأثر على سرعة استجابة التطبيق بتاعك (Performance). ودايماً جرب الـ Middleware بتاعك في حالات الـ Edge Cases عشان تتأكد إن مفيش ثغرات أمنية (Security Vulnerabilities) ممكن تعدي منك.
اتعلم تقرأ الـ Documentation الرسمي للارافيل، وجرب بايدك، لأن المبرمج الشاطر هو اللي بيغلط وبيصلح لنفسه. بالتوفيق في مشروعك الجاي!



