Featured blog image
107 كلمة 1 دقيقة للقراءة

تغيير طريقة تعريف Middleware داخل Controllers في Laravel 11

من بين التحديثات المهمة في Laravel 11، جاء تعديل جديد في كيفية تعريف الـ Middleware داخل الـ Controllers، وهو تغيير يعكس فلسفة Laravel المستمرة نحو كتابة كود أوضح، أنظف، وأكثر تنظيمًا.


الطريقة القديمة (قبل Laravel 11)

في الإصدارات السابقة، كنا نعرّف الـ middleware داخل الكنترولر باستخدام دالة __construct() بهذا الشكل:


class UserController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth')->only('index');
    }
}
  

هذا الأسلوب كان يعمل جيدًا، لكنه يخل جزئيًا بمبدأ فصل المسؤوليات (Separation of Concerns)، لأن دالة __construct() هدفها الأساسي هو تهيئة الكائن (initialize object)، وليس تحديد منطق تنفيذ الطلبات أو التحكم في الوصول.


الطريقة الجديدة في Laravel 11

في Laravel 11، تم تقديم واجهة جديدة باسم Illuminate\Routing\Controllers\HasMiddleware، والتي توفر طريقة أكثر وضوحًا لتحديد الـ middleware داخل الكنترولر:


use Illuminate\Routing\Controllers\HasMiddleware;
use Illuminate\Routing\Controllers\Middleware;

class UserController extends Controller implements HasMiddleware
{
    public static function middleware(): array
    {
        return [
            new Middleware('auth', only: ['index']),
        ];
    }
}
  

بهذا الشكل، أصبح تعريف الميدل وير يتم عبر دالة static مخصصة، دون الحاجة لاستخدام __construct().


لماذا هذا التغيير؟


1. فصل الاهتمامات (Separation of Concerns)

الآن تم تخصيص مكان واضح لتعريف الميدل وير بدلًا من خلطه داخل تهيئة الكائن. هذا يجعل الكود أكثر ترتيبًا، وأسهل في الفهم والصيانة.


2. وضوح أكبر (Expressiveness)

باستخدام كلاس Middleware، يمكن تحديد الخيارات مثل only و except بطريقة تصريحية وواضحة، بدلًا من سلاسل استدعاءات متعددة. النتيجة: كود نظيف وواضح لأي مطور جديد يدخل على المشروع.


3. بنية أكثر قابلية للتوسع

عند التعامل مع Controllers معقدة أو متعددة الطبقات، وجود تعريف ثابت للميدل وير يجعل اكتشافها وتحليلها أسهل، ويساعد Laravel في تنظيم عملية تطبيقها داخليًا.


هل الأسلوب القديم توقف عن العمل؟

ليس تمامًا — الأسلوب القديم باستخدام $this->middleware() داخل __construct() لا يزال يعمل طالما لم تستخدم واجهة HasMiddleware. لكن الأسلوب الجديد هو الموصى به رسميًا في المشاريع الجديدة والمعتمدة على Laravel 11.


الخلاصة

الانتقال إلى HasMiddleware في Laravel 11 ليس مجرد تغيير في الصياغة، بل خطوة نحو كود أكثر وضوحًا وتنظيمًا، يلتزم بمبادئ هندسة البرمجيات الحديثة.


Laravel 11 يواصل التطوير نحو البساطة والوضوح — وكالعادة، يترك لك حرية كتابة كود أنيق وسهل الفهم.

شارك الآن ؟
تواصل معي