التوجيه والـ Controllers في Laravel 12

Amine
31/07/2025

الوحدة 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 كامل.

الخطوات:

  1. إنشاء نموذج Post:
php artisan make:model Post -mf
  1. تعديل Migration:
Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('content');
    $table->timestamps();
});
  1. تشغيل Migration:
php artisan migrate
  1. إنشاء Resource Controller:
php artisan make:controller PostController --resource
  1. تعريف المسارات:
Route::resource('posts', PostController::class);
  1. تنفيذ الدوال في 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', 'تم حذف المنشور بنجاح');
}
  1. إنشاء ملفات العرض في resources/views/posts/:

قم بإنشاء ملفات مثل: index.blade.php، create.blade.php، show.blade.php، edit.blade.php مع العناصر المناسبة.

الملخص

في هذه الوحدة، تعلمنا كيفية إدارة المسارات في Laravel 12 وإنشاء Controllers لمعالجة الطلبات. كما استعرضنا استخدام Resource Controllers لتسهيل إنشاء واجهات RESTful، وتطبيق الربط التلقائي للنماذج لتبسيط الوصول إلى البيانات.

التطبيق العملي أظهر كيف يمكننا إنشاء نظام إدارة كامل للمنشورات باستخدام CRUD، مما يُعد أساسًا مهمًا لبناء تطبيقات أكبر وأكثر تعقيدًا.

التعليقات

اترك تعليقاً