التوجيه والـ Controllers في Laravel 12
الوحدة 2: التوجيه (Routing) والـ Controllers
في هذه الوحدة، سنستكشف نظام التوجيه (Routing) في Laravel 12 وكيفية ربط عناوين URL بمنطق التطبيق من خلال الـ Controllers. كما سنلقي نظرة على الميزات المتقدمة مثل التوجيه الديناميكي، المجموعات، الـ Middleware، والـ Resource Controllers التي تسهل إنشاء واجهات RESTful.
أهداف هذه الوحدة
- فهم كيفية تعريف المسارات الثابتة والديناميكية.
- تنظيم المسارات باستخدام المجموعات (Route Groups) والـ Middleware.
- إنشاء Controllers وربطها بالمسارات.
- استخدام Resource Controllers لإنشاء واجهات RESTful.
- تطبيق الربط التلقائي للنماذج (Implicit Model Binding).
- تنفيذ تطبيق عملي لإدارة منشورات (Posts) باستخدام CRUD كامل.
المحتوى التعليمي
1. تعريف المسارات (Routes)
المسارات الثابتة
المسارات الثابتة تُستخدم لعرض محتوى ثابت عند زيارة عنوان URL معين:
Route::get('/about', function () {
return 'عن الموقع';
});
المسارات الديناميكية
المسارات الديناميكية تحتوي على متغيرات تُمرر إلى الـ Controller:
Route::get('/post/{id}', function ($id) {
return "عرض المنشور برقم: $id";
});
المسارات المسماة (Named Routes)
تسمح لنا المسارات المسماة بإنشاء روابط بسهولة باستخدام دالة route()
:
Route::get('/profile', function () {
return 'الملف الشخصي';
})->name('profile');
// في العرض:
الملف الشخصي
2. مجموعات المسارات (Route Groups)
نستخدم مجموعات المسارات لتنظيم الكود وتقليل التكرار:
Route::prefix('admin')->group(function () {
Route::get('/dashboard', [AdminController::class, 'dashboard']);
Route::get('/users', [AdminController::class, 'users']);
});
3. الـ Middleware
الـ Middleware تُستخدم لتصفية الطلبات قبل وصولها إلى الـ Controller:
Route::get('/admin', function () {
return 'لوحة التحكم';
})->middleware('auth');
4. الـ Controllers
الـ Controllers هي فئات تحتوي على منطق معالجة الطلبات. يمكن إنشاؤها باستخدام الأمر التالي:
php artisan make:controller PostController
ربط المسار بـ Controller
Route::get('/posts', [PostController::class, 'index']);
5. Resource Controllers
تُستخدم Resource Controllers لإنشاء واجهات RESTful بسرعة، وتوفر 7 طرق افتراضية:
الطريقة | المسار | الوظيفة |
---|---|---|
GET | /posts | عرض جميع المنشورات |
GET | /posts/create | عرض نموذج إنشاء منشور |
POST | /posts | حفظ منشور جديد |
GET | /posts/{post} | عرض منشور محدد |
GET | /posts/{post}/edit | عرض نموذج تعديل منشور |
PUT/PATCH | /posts/{post} | تحديث منشور |
DELETE | /posts/{post} | حذف منشور |
Route::resource('posts', PostController::class);
6. الربط التلقائي للنماذج (Implicit Model Binding)
يمكن لـ Laravel أن يربط تلقائيًا متغير في المسار بنموذج في قاعدة البيانات:
// في routes/web.php
Route::get('/posts/{post}', [PostController::class, 'show']);
// في PostController
public function show(Post $post)
{
return view('posts.show', compact('post'));
}
هنا، سيتم تلقائيًا جلب النموذج الذي يطابق المعرف $post
من قاعدة البيانات.
نصائح مهمة
- استخدم
Route::resource()
دائمًا عند إنشاء واجهات CRUD. - أظهر كيف يمكن تخصيص الربط التلقائي باستخدام دالة
getRouteKeyName()
في النموذج. - شجع الطلاب على تنظيم المسارات باستخدام المجموعات والـ Middleware.
التطبيق العملي
سنقوم بإنشاء نظام إدارة منشورات (Posts) باستخدام CRUD كامل.
الخطوات:
- إنشاء نموذج Post:
php artisan make:model Post -mf
- تعديل Migration:
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
- تشغيل Migration:
php artisan migrate
- إنشاء Resource Controller:
php artisan make:controller PostController --resource
- تعريف المسارات:
Route::resource('posts', PostController::class);
- تنفيذ الدوال في Controller:
public function index()
{
$posts = Post::all();
return view('posts.index', compact('posts'));
}
public function create()
{
return view('posts.create');
}
public function store(Request $request)
{
$request->validate([
'title' => 'required',
'content' => 'required',
]);
Post::create($request->all());
return redirect()->route('posts.index')->with('success', 'تم إنشاء المنشور بنجاح');
}
public function show(Post $post)
{
return view('posts.show', compact('post'));
}
public function edit(Post $post)
{
return view('posts.edit', compact('post'));
}
public function update(Request $request, Post $post)
{
$request->validate([
'title' => 'required',
'content' => 'required',
]);
$post->update($request->all());
return redirect()->route('posts.index')->with('success', 'تم تحديث المنشور بنجاح');
}
public function destroy(Post $post)
{
$post->delete();
return redirect()->route('posts.index')->with('success', 'تم حذف المنشور بنجاح');
}
- إنشاء ملفات العرض في
resources/views/posts/
:
قم بإنشاء ملفات مثل: index.blade.php
، create.blade.php
، show.blade.php
، edit.blade.php
مع العناصر المناسبة.
الملخص
في هذه الوحدة، تعلمنا كيفية إدارة المسارات في Laravel 12 وإنشاء Controllers لمعالجة الطلبات. كما استعرضنا استخدام Resource Controllers لتسهيل إنشاء واجهات RESTful، وتطبيق الربط التلقائي للنماذج لتبسيط الوصول إلى البيانات.
التطبيق العملي أظهر كيف يمكننا إنشاء نظام إدارة كامل للمنشورات باستخدام CRUD، مما يُعد أساسًا مهمًا لبناء تطبيقات أكبر وأكثر تعقيدًا.
اترك تعليقاً