بعد تثبيت Laravel بنجاح، يواجه المبتدئ سؤالًا محوريًا:
وهو كيف يعرف Laravel أي صفحة يجب عرضها عند زيارة رابط معيّن؟
الجواب يكمن في مفهوم Routes، وهو من أهم أساسيات Laravel، لأن أي طلب (Request) يمر عبره أولًا.
لذلك، فهم Routes بشكل صحيح يختصر عليك الكثير من الأخطاء لاحقًا.
علاوة على ذلك في هذا المقال، سنشرح ما هي Routes في Laravel، ما المشكلة التي تحلها، وكيف تستخدمها بأسلوب عملي ومنظم.
المشكلة: التعامل العشوائي مع الروابط في PHP
كما نعرف في PHP التقليدية، غالبًا يتم التعامل مع الروابط بهذا الشكل:
- ملف لكل صفحة
- منطق التطبيق والواجهة في نفس الملف
- صعوبة تمرير البيانات
- فوضى في تنظيم المشروع
نتيجةً لذلك، يصبح المشروع غير قابل للتوسّع، وأي تعديل في الروابط قد يكسر أجزاء أخرى من التطبيق.
الحل: نظام Routes في Laravel
ومن هنا Laravel يقدّم نظام Routing واضح ومركزي، يسمح لك بـ:
- تعريف جميع الروابط في مكان واحد
- ربط كل رابط بمنطق معيّن
- تمرير البيانات بسهولة
- حماية الروابط والتحكم فيها
ومن هنا يصبح التطبيق أكثر تنظيمًا وأسهل في الصيانة.
ما هي Routes في Laravel؟
الجواب Routes هي تعليمات تخبر Laravel:
- ما الرابط الذي تم طلبه
- أي كود يجب تنفيذه
- وما الصفحة التي يجب عرضها
نظرًا لـأن جميع Routes الأساسية توجد داخل الملف:
routes/web.php
أول Route في Laravel
على سبيل المثال:
Route::get('/', function () {
return view('welcome');
});
ونتيجة لذلك أنه:
- عند زيارة الصفحة الرئيسية
/ - يتم عرض صفحة
welcome.blade.php
أنواع Routes في Laravel
Route::get
يُستخدم لعرض الصفحات:
Route::get('/about', function () {
return 'About Page';
});
Route::post
يُستخدم لإرسال البيانات:
Route::post('/contact', function () {
return 'Form Submitted';
});
Route::put و Route::delete
تُستخدم غالبًا مع CRUD:
Route::put('/post/{id}', function ($id) {
return $id;
});
Route::delete('/post/{id}', function ($id) {
return $id;
});
Route Parameters (تمرير القيم داخل الرابط)
لماذا إنشاء Route لكل عنصر، بينما يمكنك استخدام Parameters:
Route::get('/user/{id}', function ($id) {
return 'User ID: ' . $id;
});
ونتيجة لذلك Laravel يمرّر القيمة تلقائيًا للـ function.
Route Parameters مع شروط
يمكنك تحديد نوع القيمة:
Route::get('/user/{id}', function ($id) {
return $id;
})->where('id', '[0-9]+');
Route Naming (تسمية Routes)
تسمية Routes تساعد في:
- تجنب الروابط الثابتة
- تسهيل التعديل لاحقًا
على سبيل المثال:
Route::get('/dashboard', function () {
return view('dashboard');
})->name('dashboard');
وبذلك الاستخدام داخل Blade يصبح:
route('dashboard')
Route Groups (تنظيم Routes)
Group مع prefix
Route::prefix('admin')->group(function () {
Route::get('/users', function () {
return 'Admin Users';
});
});
الرابط يصبح:
/admin/users
Group مع middleware
Route::middleware('auth')->group(function () {
Route::get('/profile', function () {
return 'Profile';
});
});
ربط Route بـ Controller (الطريقة الصحيحة)
بدل كتابة منطق داخل Route:
Route::get('/posts', [PostController::class, 'index']);
وهذا الأسلوب هو الأفضل في المشاريع الحقيقية.
أخطاء شائعة في Routes
Route not defined
السبب: نسيان تسمية Route أو خطأ في الاسم
الحل: التأكد من الاسم واستخدام route:list
Page not found 404
السبب: Route غير معرّف
الحل: مراجعة web.php وترتيب Routes
Route cache issues
الحل:
php artisan route:clear
متى تحتاج فهم Routes بعمق؟
- عند بناء CRUD
- عند إنشاء APIs
- عند حماية الصفحات
- عند تنظيم مشروع كبير
لذلك، Routes ليست مجرد روابط، بل قلب التطبيق.
