Laravel whereNumber بدل Regex للـRoute

x32x01
  • بواسطة x32x01 ||
  • #1
Laravel Route Constraints: استخدم whereNumber بدل Regex
لو محتاج تتأكد إن قيمة الـID في Laravel عبارة عن رقم، مش لازم تكتب Regex بنفسك كل مرة.
بدل:
PHP:
Route::get('/users/{id}', function ($id) {
//
})->where('id', '[0-9]+');
تقدر تستخدم الطريقة الأبسط والأوضح:
PHP:
Route::get('/users/{id}', function ($id) {
//
})->whereNumber('id');
النتيجة واحدة، لكن whereNumber() بتوضح نيتك بشكل مباشر: الـid لازم يكون رقم.



Laravel Route Constraints الجاهزة​

Laravel بيوفر مجموعة من الـmethods الجاهزة لعمل Route Constraints بدون الحاجة لكتابة Regex يدويًا.
منها:
PHP:
->whereNumber('id');
->whereAlpha('name');
->whereAlphaNumeric('username');
->whereUuid('id');
->whereUlid('id');
كل method منهم مخصص لنوع معين من القيم.
Methodالاستخدام
whereNumber()يسمح بالأرقام
whereAlpha()يسمح بالحروف الأبجدية
whereAlphaNumeric()يسمح بالحروف والأرقام
whereUuid()يتأكد من أن القيمة UUID
whereUlid()يتأكد من أن القيمة ULID
مثلًا، لو عندك Route خاص بالمستخدمين:
PHP:
Route::get('/users/{id}', function ($id) {
//
})->whereNumber('id');
ولو عندك اسم مستخدم وعايز تسمح بالحروف والأرقام فقط:
PHP:
Route::get('/users/{username}', function ($username) {
//
})->whereAlphaNumeric('username');



هل استخدام Regex غلط؟​

لا، خالص.
استخدام where() مع Regex لسه مفيد جدًا لما يكون عندك شرط مخصص ومفيش Method جاهز يغطيه.
مثلًا:
PHP:
Route::get('/posts/{post}', function ($post) {
//
})->where('post', '[0-9]+');
لكن لو Laravel موفر لك Method واضح لنفس الحالة، استخدامه بيخلي الكود أسهل في القراءة والفهم.
الموضوع مش إنك لازم تحفظ كل Helper في Laravel، لكن كل ما تعرف الأدوات الموجودة في الـFramework، تقدر تختار الحل الأبسط بدل ما تعيد كتابة حاجة موجودة أصلًا.



ليه whereNumber() أوضح؟​

الفرق مش كبير في عدد الأسطر، لكن في وضوح الكود.
لما تشوف:
->whereNumber('id')
هتفهم فورًا إن الـid لازم يكون رقم.
أما:
->where('id', '[0-9]+')
فمحتاج تعرف أو تراجع الـRegex عشان تفهم الشرط.
وده واحد من الحاجات اللي بتفرق مع الوقت: الخبرة مش دايمًا معناها إنك تكتب Code أكتر، أحيانًا معناها إنك تعرف إمتى تكتب أقل.



الخلاصة​

لو Laravel عنده Route Constraint جاهز للحالة اللي عندك، استخدمه لما يكون أوضح وأنسب.
أهم الأمثلة:
PHP:
->whereNumber('id');
->whereAlpha('name');
->whereAlphaNumeric('username');
->whereUuid('id');
->whereUlid('id');
أما الـRegex، فخليه موجود في صندوق أدواتك واستخدمه لما تحتاج شرطًا مخصصًا لا يغطيه أحد الـmethods الجاهزة.
وده بالضبط النوع من التفاصيل الصغيرة اللي ممكن تكتشفها أثناء قراءة Laravel Documentation، وتخليك تكتب كود أوضح وأبسط وأسهل في القراءة.



الأسئلة الشائعة​

-------------

هل whereNumber() أفضل من where() في Laravel؟​

لو الشرط المطلوب هو التأكد من أن القيمة رقم، فإن whereNumber() طريقة واضحة ومباشرة لهذا الغرض. أما where() مع Regex فتظل مناسبة عندما تحتاج إلى نمط مخصص.

هل يمكن استخدام Regex مع Laravel Route Constraints؟​

نعم. تقدر تستخدم where() وتحدد Regex خاص بالـRoute Parameter.

ما الفرق بين whereAlpha() و whereAlphaNumeric()؟​

whereAlpha() مخصص للقيم التي تحتوي على حروف أبجدية، بينما whereAlphaNumeric() يسمح بالحروف والأرقام.

متى أستخدم whereUuid() و whereUlid()؟​

استخدم whereUuid() عندما يكون الـRoute Parameter عبارة عن UUID، وwhereUlid() عندما تستخدم ULID.
 
مواضيع مشابهة
x32x01
الردود
0
المشاهدات
10
x32x01
x32x01
x32x01
الردود
0
المشاهدات
43
x32x01
x32x01
إحصائيات المنتدى
المواضيع
2,293
المشاركات
2,358
الأعضاء
16
آخر عضو مسجل
HcN57
عودة
أعلى