- بواسطة x32x01 ||
Laravel Route Constraints: استخدم whereNumber بدل Regex
لو محتاج تتأكد إن قيمة الـID في Laravel عبارة عن رقم، مش لازم تكتب Regex بنفسك كل مرة.
بدل:
تقدر تستخدم الطريقة الأبسط والأوضح:
النتيجة واحدة، لكن
منها:
كل method منهم مخصص لنوع معين من القيم.
مثلًا، لو عندك Route خاص بالمستخدمين:
ولو عندك اسم مستخدم وعايز تسمح بالحروف والأرقام فقط:
استخدام
مثلًا:
لكن لو Laravel موفر لك Method واضح لنفس الحالة، استخدامه بيخلي الكود أسهل في القراءة والفهم.
الموضوع مش إنك لازم تحفظ كل Helper في Laravel، لكن كل ما تعرف الأدوات الموجودة في الـFramework، تقدر تختار الحل الأبسط بدل ما تعيد كتابة حاجة موجودة أصلًا.
لما تشوف:
هتفهم فورًا إن الـ
أما:
فمحتاج تعرف أو تراجع الـRegex عشان تفهم الشرط.
وده واحد من الحاجات اللي بتفرق مع الوقت: الخبرة مش دايمًا معناها إنك تكتب Code أكتر، أحيانًا معناها إنك تعرف إمتى تكتب أقل.
أهم الأمثلة:
أما الـRegex، فخليه موجود في صندوق أدواتك واستخدمه لما تحتاج شرطًا مخصصًا لا يغطيه أحد الـmethods الجاهزة.
وده بالضبط النوع من التفاصيل الصغيرة اللي ممكن تكتشفها أثناء قراءة Laravel Documentation، وتخليك تكتب كود أوضح وأبسط وأسهل في القراءة.
لو محتاج تتأكد إن قيمة الـ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 | الاستخدام |
|---|---|
whereNumber() | يسمح بالأرقام |
whereAlpha() | يسمح بالحروف الأبجدية |
whereAlphaNumeric() | يسمح بالحروف والأرقام |
whereUuid() | يتأكد من أن القيمة UUID |
whereUlid() | يتأكد من أن القيمة ULID |
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]+'); الموضوع مش إنك لازم تحفظ كل 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'); وده بالضبط النوع من التفاصيل الصغيرة اللي ممكن تكتشفها أثناء قراءة 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.