يتيح لك Laravel 13 الآن استبدال خصائص $table و $fillable و $casts التي تزدحم بها معظم النماذج (models) باستخدام سمات (attributes) PHP الأصلية. ينطبق هذا التغيير على أكثر من عشرة ميزات في إطار العمل، بدءاً من إعدادات النموذج وصولاً إلى مستمعي الأحداث (event listeners) والرسائل البريدية (mailables)، وهو يعمل دون كسر الكود الحالي.
لماذا أضاف Laravel السمات الأصلية
اعتمد Laravel لفترة طويلة على "السلاسل النصية السحرية" (magic strings) – وهي مصفوفات من أسماء الأعمدة أو الحقول المخفية التي توجد في أعلى فئة النموذج (model class). لا تعطي هذه المصفوفات أي تلميح لبيئة التطوير المتكاملة (IDE) حول المخطط (schema) الأساسي، لذا فإن إعادة تسمية عمود قد تمر دون ملاحظة. ومن خلال نقل الإعدادات إلى كود حقيقي ومحدد النوع (typed code)، يمنح Laravel المطورين وسيلة لإبقاء جسم الفئة مركزاً على منطق العمل (business logic) مع السماح للمحرر بإظهار ميزات الإكمال التلقائي، والتحقق من النوع، وأدوات إعادة التسمية والتحويل (rename-refactor).
يقرأ إطار العمل السمات عبر PHP’s reflection API ويقوم بتخزين النتيجة مؤقتاً (cache)، لذا فإن العبء الإضافي أثناء وقت التشغيل (runtime overhead) يكاد يكون معدوماً. ستستمر النماذج القائمة على الخصائص في العمل تماماً كما تعمل اليوم، مما يعني أنه يمكنك اعتماد الصيغة الجديدة تدريجياً.
ما الذي ستجنيه
- إعدادات محددة النوع (Typed configuration) – تقبل السمات وسائط محددة النوع (typed arguments)، مما يلغي الحاجة إلى السلاسل النصية السحرية. إذا قمت بإعادة تسمية عمود، فسيقوم الـ IDE بتحديد كل مكان تحتاج فيه إلى التحديث.
- أجسام فئات أكثر نظافة – تعيش جميع الإعدادات فوق اسم الفئة؛ ويحتوي الجسم فقط على العلاقات (relationships)، والنطاقات (scopes)، والأساليب (methods).
- تجربة IDE أفضل – يعمل الإكمال التلقائي والتحليل الساكن (static analysis) على وسائط السمات، وهو أمر لا تستطيع مصفوفات السلاسل النصية توفيره.
- لا توجد تغييرات جذرية (No breaking changes) – يقرأ Laravel كلاً من الخصائص القديمة والسمات الجديدة، لذا فإن قاعدة الكود المختلطة ستعمل دون مشاكل.
دليل الهجرة خطوة بخطوة
تحديد النموذج المراد هجرته
افتح ملف النموذج. إذا كانت الخطوط الاثني عشر الأولى تهيمن عليها$tableأو$fillableأو$hiddenأو طريقةcasts()، فهو مرشح لذلك.إضافة فئات السمات
في الجزء العلوي من الملف، قم باستيراد فئات السمات التي تقابل الخصائص التي ستستبدلها (مثلTableوFillableوCasts). يوفر Laravel هذه السمات جاهزة للاستخدام.استبدال تصريحات الخصائص بالسمات
// Before protected $table = 'site_deployments'; protected $fillable = ['site_id', 'server_id', 'status']; protected function casts(): array { return ['is_rollback' => 'boolean']; }// After #[Table('site_deployments')] #[Fillable(['site_id', 'server_id', 'status'])] #[Casts(['is_rollback' => 'boolean'])] class Deployment extends Model { // business logic only }توضع صيغة السمات مباشرة فوق تصريح الفئة. قم بإزالة الخاصية أو الطريقة الأصلية بعد التأكد من أن السمة تعمل بشكل صحيح.
تشغيل مجموعة الاختبارات
تحقق من أن التعيين الجماعي (mass-assignment)، والتسلسل (serialization)، وأي تحويل مخصص (custom casting) لا يزال يعمل كما كان من قبل. يتم تخزين معالجة السمات في Laravel مؤقتاً، لذا فإن فشل الاختبار يشير عادةً إلى خطأ مطبعي في وسائط السمة.التثبيت والنشر في دفعات صغيرة
قم بدفع النموذج الذي تمت هجرته إلى فرع ميزة (feature branch)، وادمجها بعد اجتياز خط أنابيب CI، ثم قم بنشرها لمجموعة فرعية من الخوادم. نظرًا لأن صيغة الخصائص القديمة لا تزال مدعومة، فإن أي مرجع عابر لن يتسبب في خطأ أثناء وقت التشغيل.التكرار لكل مساحة أسماء (namespace)
بدلاً من إعادة كتابة قاعدة الكود بالكامل مرة واحدة، انقل مجموعة منطقية واحدة من النماذج (على سبيل المثال، جميع الكيانات المتعلقة بالفواتير) إلى السمات، ثم كرر العملية للمجموعة التالية. هذا يقلل من نطاق التأثير (blast radius) لأي تراجع (regression).
الأدوات وشبكات الأمان
- Rector – أداة إعادة هيكلة (refactoring) مؤتمتة يمكنها تحويل صيغة الخصائص المتكررة إلى سمات. قم بتشغيلها على نسخة من قاعدة الكود، وراجع الفرق (diff)، وطبق التغييرات التي تبدو صحيحة.
- الاختبارات المؤتمتة – تلتقط أدوات الاختبار المدمجة في Laravel أي اختلافات في التعيين الجماعي ومخرجات JSON. حافظ على نجاحها (green) بعد كل خطوة هجرة.
- أعلام الميزات (Feature flags) – إذا كنت بحاجة إلى التراجع بسرعة، فقم بتغليف استخدام السمات الجديدة خلف علم يبدل بين الإعدادات القديمة والجديدة.
متى قد تتخطى عملية الهجرة
إذا كان المشروع صغيراً ومستقراً ونادراً ما يتم لمسه، فقد لا تفوق فائدة النماذج الأكثر نظافة الجهد المبذول في التحويل. صيغة السمات اختيارية؛ يمكنك الاستمرار في استخدام نهج الخصائص الكلاسيكي إلى أجل غير مسمى. وعلى العكس من ذلك، بالنسبة للتطبيقات التي يتم تطويرها بنشاط، خاصة تلك التي تحتوي على نماذج كبيرة أو تغييرات متكررة في المخطط، فإن اعتماد السمات مبكراً يقلل من الاحتكاك المستقبلي.
ما الذي يجب مراقبته لاحقاً
يتوسع دعم السمات في Laravel 13 إلى ما هو أبعد من النماذج ليشمل مستمعي الأحداث (event listeners)، والإشعارات (notifications)، والرسائل البريدية (mailables)، وأحداث البث (broadcast events). ومع اعتماد المجتمع لهذه الصيغة في تلك المجالات، ستظهر أنماط إعادة هيكلة مماثلة. ابقَ على اطلاع بدليل الترقية الرسمي لأي فئات سمات جديدة ستصدر في الإصدارات الفرعية المستقبلية.
الخلاصة: يوفر لك Laravel 13 مساراً دون تكلفة إضافية للوصول إلى نماذج أكثر رشاقة وتوافقاً مع بيئات التطوير (IDE). قم بتحويل مساحة أسماء واحدة في كل مرة، واعتمد على Rector ومجموعة الاختبارات الخاصة بك، وستنتهي بفئات تُقرأ كمواصفات للأعمال بدلاً من كونها مجرد ملفات لتفريغ الإعدادات.
