أطلقت Laravel نسخة 13.36 مجموعة مُنشئات (Fluent Rule Builders) تغطي جميع قواعد التحقق التي كانت تُكتب سابقًا كسلاسل نصية. الآن يمكن كتابة القواعد ككائنات PHP، ما يُحسّن الإكمال التلقائي في المحرّرات ويُظهر الأخطاء قبل تشغيل التطبيق.
كيف تبدو القواعد الآن
مثال على نموذج يستخدم القواعد النصية التقليدية:
$request->validate([
’email’ => ‘required_without:phone|email’,
‘phone’ => ‘required_without:email’,
‘website’ => ‘nullable|url:https’,
‘device_id’ => ‘uuid:4’,
‘tags.*’ => ‘distinct:ignore_case’,
‘password’ => ‘required|confirmed’,
‘timezone’ => ‘timezone:per_country,US’,
]);
نفس النموذج باستخدام المُنشئات الفصيحة:
use Illuminate\Validation\Rule;
$request->validate([
’email’ => [Rule::requiredWithout(‘phone’), Rule::email()],
‘phone’ => [Rule::requiredWithout(’email’)],
‘website’ => [Rule::nullable(), Rule::url()->protocols([‘https’])],
‘device_id’ => [Rule::uuid()->version(4)],
‘tags.*’ => [Rule::distinct()->ignoreCase()],
‘password’ => [Rule::required(), Rule::confirmed()],
‘timezone’ => [Rule::timezone([‘per_country’, ‘US’])],
]);
السلاسل النصية لا تزال صالحة ويمكن خلط الأسلوبين في نفس المصفوفة.
قائمة القواعد المتاحة
- قواعد بدون معلمات (تُعيد السلسلة مباشرة): accepted(), activeUrl(), bail(), base64(), boolean(), declined(), exclude(), filled(), hexColor(), json(), list(), macAddress(), missing(), nullable(), present(), prohibited(), required(), sometimes(), ulid()
- قواعد تستقبل حقولًا أو قيمًا: requiredWith(), requiredWithAll(), requiredWithout(), requiredWithoutAll(), requiredIfAccepted(), requiredIfDeclined(), inArray(), inArrayKeys(), missingIf(), missingUnless(), missingWith(), missingWithAll(), presentIf(), presentUnless(), presentWith(), presentWithAll(), prohibitedIfAccepted(), prohibitedIfDeclined(), prohibits(), regex(), timezone()
- قواعد ذات خيارات إضافية: url()->protocols([…]), uuid()->version(…), ip()->version(…), distinct()->strict()->ignoreCase(), confirmed()->customField(‘repeat_pass’), currentPassword()->guard(‘admin’)
تُعالج المُنشئات القيم التي تحتوي على فواصل أو علامات اقتباس بصورة صحيحة. فمثلاً:
‘rules’ => [Rule::acceptedIf(‘plan’, ‘Team, Annual’)]
سيحافظ على الفاصلة داخل القيمة، بينما في الصيغة النصية كانت تُقسمها إلى قيمتين منفصلتين.
ما يعنيه ذلك للمطوّرين
برأينا، إضافة المُنشئات الفصيحة تُغيّر طريقة كتابة قواعد التحقق في Laravel بعدة طرق:
• تحسين الإكمال التلقائي في IDEs، ما يقلل الأخطاء الإملائية مثل كتابة rule غير موجودة.
• تمكين المطوّرين من دمج القواعد مع منطق PHP مباشرة، مثل تمرير متغيرات أو حساب قيم قبل استخدامها.
• معالجة أسهل للقيم التي تحتوي على فواصل أو علامات اقتباس دون الحاجة لتدوينها يدوياً.
• الحفاظ على التوافق مع القواعد النصية القديمة، لذا لا يلزم تعديل الكود الموجود فورًا.
باختصار، Laravel 13.36 يقدّم بنية أكثر وضوحًا وصديقة للمطورين لكتابة قواعد التحقق، ما يُسرّع عملية التطوير ويقلل الأخطاء التي قد تظهر فقط وقت تشغيل الفاليديتور.
المصدر: laravel-news.com