المسارات في Laravel: Routes
عندما يكتب الزائر عنواناً مثل /about أو /posts/5، كيف يعرف Laravel ماذا يعرض له؟ الإجابة: المسارات (Routes). المسار هو أول محطة يمر بها كل طلب في تطبيقك، ويحدد الكود الذي سيستقبله. في هذا الدرس ستتعلم كتابة المسارات بكل أشكالها الأساسية.
ما هو المسار؟
Section titled “ما هو المسار؟”المسار قاعدة تقول: «إذا طلب الزائر هذا العنوان بـ هذه الطريقة، فنفّذ هذا الكود».
تخيّل موظف الاستقبال في مبنى كبير. تقول له: «أريد قسم الحسابات»، فيوجهك إلى الطابق الثالث. المسارات هي موظف الاستقبال في تطبيقك: تستقبل كل طلب وتوجهه إلى المكان الصحيح.
مسارات صفحات الموقع مكتوبة في الملف routes/web.php:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/hello', function () { return 'مرحباً من Laravel!';});Route::get: المسار يستجيب لطلبات GET، أي فتح الصفحة في المتصفح.'/hello': العنوان (URI) بعد اسم الموقع.- الدالة: الكود الذي يُنفَّذ، وما تُرجعه هو ما يراه الزائر.
افتح http://localhost:8000/hello وسترى:
مرحباً من Laravel!هذه الدالة بلا اسم تسمى Closure. وهي مناسبة للتجربة والصفحات البسيطة، لكن في التطبيقات الحقيقية ننقل الكود إلى Controllers كما سترى في الدرس القادم.
طرق الطلب
Section titled “طرق الطلب”| الدالة | الاستخدام |
|---|---|
Route::get |
عرض صفحة أو بيانات |
Route::post |
استقبال بيانات نموذج لإنشاء شيء جديد |
Route::put و Route::patch |
تعديل بيانات موجودة |
Route::delete |
حذف بيانات |
تذكّر من كورس PHP أن النماذج ترسل بـ GET أو POST. و Laravel يضيف طرقاً أخرى ليصبح لكل عملية طريقتها الواضحة.
إرجاع أنواع مختلفة
Section titled “إرجاع أنواع مختلفة”المسار يمكن أن يُرجع نصاً، أو صفحة كاملة، أو حتى بيانات JSON:
Route::get('/api/course', function () { return ['course' => 'Laravel', 'lessons' => 6];});{"course":"Laravel","lessons":6}عندما تُرجع مصفوفة، يحوّلها Laravel تلقائياً إلى JSON، وهي الصيغة التي تتبادل بها التطبيقات البيانات. وأكثر ما ستُرجعه في صفحات الموقع هو View كما ستتعلم في درس Blade:
Route::get('/welcome-page', function () { return view('greeting');});المعاملات في الرابط
Section titled “المعاملات في الرابط”كثيراً ما يحتوي الرابط على قيمة متغيرة: رقم مقال، أو اسم مستخدم. ضع اسم المعامل بين قوسين معقوفين، وسيصلك كمتغير في الدالة:
Route::get('/user/{name}', function (string $name) { return "أهلاً يا $name";});زيارة /user/sara تعطي:
أهلاً يا saraأما زيارة /user بدون اسم، فتعطي خطأ 404 (الصفحة غير موجودة)، لأن المعامل إجباري.
معامل اختياري: أضف علامة ? بعد اسمه، وأعطه قيمة افتراضية:
Route::get('/greet/{name?}', function (?string $name = 'زائر') { return "أهلاً يا $name";});الآن /greet تعطي «أهلاً يا زائر»، و /greet/omar تعطي «أهلاً يا omar».
تقييد المعامل: إذا كان المعامل يجب أن يكون رقماً فقط:
Route::get('/lessons/{id}', function (int $id) { return "الدرس رقم $id";})->whereNumber('id');/lessons/5 تعطي «الدرس رقم 5»، أما /lessons/abc فتعطي 404 مباشرة، دون أن يصل الطلب لكودك.
المسارات المسماة
Section titled “المسارات المسماة”يمكنك إعطاء المسار اسماً بالدالة name:
Route::get('/about-us', function () { return 'صفحة من نحن';})->name('about');ثم تولّد رابطه في أي مكان بالدالة route:
Route::get('/link', function () { return route('about');});http://localhost:8000/about-usلماذا هذا مفيد؟ لو قررت لاحقاً تغيير العنوان من /about-us إلى /who-we-are، تعدّل سطراً واحداً في المسار، وكل الروابط في موقعك تتغير تلقائياً لأنها تستخدم الاسم وليس العنوان. مثل أن تحفظ رقم صديقك في الهاتف باسمه: لو غيّر رقمه، تعدّل جهة الاتصال مرة واحدة فقط.
التحويل (Redirect)
Section titled “التحويل (Redirect)”إذا نقلت صفحة لعنوان جديد، حوّل الزوار من العنوان القديم تلقائياً:
Route::redirect('/old-about', '/about-us');عرض كل المسارات
Section titled “عرض كل المسارات”مع كبر التطبيق ستكثر المسارات. هذا الأمر يعرضها كلها في جدول:
php artisan route:listوتستطيع تصفية النتيجة بـ --path، مثلاً php artisan route:list --path=posts يعرض المسارات التي تحتوي posts فقط، مع طريقة كل مسار واسمه والكود الذي ينفّذه.
جرّب بنفسك
Section titled “جرّب بنفسك”أضف هذه المسارات إلى routes/web.php وجرّبها في المتصفح:
/helloتُرجع رسالة ترحيب./square/{number}تقبل أرقاماً فقط، وتُرجع «مربع 7 هو 49» مثلاً./profile/{name?}باسم اختياري قيمته الافتراضية «ضيف».- أعطِ المسار الأخير اسماً، ثم شغّل
php artisan route:listوابحث عنه في الجدول.
أخطاء شائعة
Section titled “أخطاء شائعة”- 404 لمسار موجود: راجع العنوان حرفاً بحرف، وتأكد من طريقة الطلب: مسار
Route::postلا يفتح بكتابة العنوان في المتصفح، لأن المتصفح يرسل GET. - نسيان return: إذا لم تُرجع الدالة شيئاً، تظهر صفحة بيضاء فارغة.
- ترتيب المسارات: مسار عام مثل
/posts/{id}المكتوب قبل/posts/createسيلتقط كلمةcreateعلى أنها id. اكتب المسارات الثابتة قبل التي فيها معاملات.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ماذا يحدث عند زيارة /lessons/abc إذا كان المسار مقيداً بـ whereNumber('id')؟
القيد يجعل المسار لا يطابق إلا الأرقام، فلا يجد Laravel مساراً مناسباً ويعرض 404.
سؤال
ما فائدة تسمية المسار بـ ->name('about')؟
الروابط المولّدة بالاسم تتحدث تلقائياً عند تغيير العنوان، فتعدّل مكاناً واحداً فقط.
الخلاصة
Section titled “الخلاصة”- المسار يربط عنواناً وطريقة طلب بكود ينفّذ، ومكانه
routes/web.php. Route::getللعرض وRoute::postلاستقبال النماذج، والمصفوفة المُرجعة تتحول JSON.- المعاملات تُكتب
{name}، والاختيارية{name?}، وwhereNumberتقيّدها بالأرقام. - سمِّ المسارات بـ
name()وولّد روابطها بـroute(). php artisan route:listتعرض كل مسارات تطبيقك.