انتقل إلى محتوى الدرس
الدرس 10
دورة إطار العمل Laravel

إنشاء المتحكمات البرمجية في Laravel وربطها بالمساراتCreating Laravel Controllers and Routing Actions

توليد كلاسات المتحكمات بأوامر Artisan ونقل منطق المعالجة إليها وربطها بالمسارات بطريقة منظمة وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

رغم أن الدوال المغلقة داخل ملف المسارات مفيدة للأمثلة السريعة، إلا أن وضع منطق الأعمال الفعلي بداخلها يحول ملف المسارات إلى ملف ضخم يصعب صيانته. تتيح لك المتحكمات Controllers تجميع العمليات المترابطة مثل عرض المنتجات وتحديثها داخل كلاسات PHP منظمة في مجلد app/Http/Controllers.

  • نقافة ملف المسارات (Clean Route Files): يبقى ملف routes/web.php فهرساً مختصراً وواضحاً يوجه الروابط نحو الكلاسات.
  • الترابط المنطقي (Logical Cohesion): جمع كافة إجراءات المورد الواحد داخل كلاس متحكم واحد يسهل صيانته.
  • دعم حاوي الخدمات (Service Container Support): تتمتع كلاسات المتحكمات بميزة الحقن التلقائي للاعتماديات في الباني والدوال.
مخطط معماري يوضح إنشاء المتحكمات البرمجية في Laravel وربطها بالمسارات في إطار العمل Laravel 12
PHP
<?php
namespace App\Http\Controllers;

class ProductController extends Controller {
    public function index(): array {
        return ['products' => ['Keyboard', 'Monitor']];
    }
}

بدلاً من إنشاء ملفات المتحكمات يدوياً، استخدم دائماً الأمر php artisan make:controller لتوليد الكلاس مع فضاء الأسماء الصحيح خلال ثوانٍ. ويُتبع عرف التسمية القياسي بصيغة المفرد PascalCase منتهياً بكلمة Controller مثل ProductController أو OrderController.

  • المولد الآلي (Artisan Generator): ينشئ ملف الكلاس جاهزاً داخل المسار app/Http/Controllers/.
  • المجلدات الفرعية (Subfolder Namespaces): تمرير مسار مثل Admin/UserController ينشئ المجلد الفرعي ويضبط فضاء الأسماء.
  • التحميل التلقائي (PSR-4 Autoloaded): يصبح الكلاس متاحاً للاستدعاء الفوري بفضل توافقه مع معيار PSR-4.
PHP
# Generate a standard controller class via Artisan
php artisan make:controller ProductController

# Generate a controller inside a nested subfolder
php artisan make:controller Admin/ReportController

لربط مسار في ملف routes/web.php بدالة داخل المتحكم، نستورد الكلاس في أعلى الملف ثم نمرر مصفوفة ثنائية [Controller::class, 'method'] كمعامل ثانٍ لدالة المسار. يمنحك استخدام الثابت القياسي ::class دعماً كاملاً للإكمال التلقائي والانتقال السريع للكود داخل محرر البرمجة.

  • صياغة المصفوفة الثنائية (Tuple Array Syntax): تمرير اسم الكلاس متبوعاً باسم الدالة النصي داخل مصفوفة من عنصرين.
  • استيراد فضاء الأسماء (use Import Statement): استيراد كلاس المتحكم في بداية ملف المسارات ليبقى الكود مختصراً.
  • دعم محررات الكود (IDE Refactoring Safe): يضمن الثابت ::class سهولة تتبع الكلاس وإعادة تسميته بأمان.
PHP
<?php
use App\Http\Controllers\ItemController;
use Illuminate\Support\Facades\Route;

Route::get('/items', [ItemController::class, 'index']);
Route::post('/items', [ItemController::class, 'store']);

تنتقل معاملات الرابط الديناميكية مثل {id} أو {slug} بسلاسة تامة إلى دوال المتحكم تماماً كما في الدوال المغلقة. كل ما عليك فعله هو تعريف المتغيرات محددة النوع في توقيع دالة المتحكم، وسيقوم الموجه بتمرير القيم الملتقطة إليها بالترتيب.

  • تحديد أنواع المعاملات (Typed Method Arguments): كتابة نوع المتغير مثل int $id في تعريف دالة المتحكم.
  • دعم القيم الافتراضية (Optional Parameters): إسناد قيمة افتراضية لمعامل دالة المتحكم عند استخدام معامل رابط اختياري.
  • التوافق مع قيود المسار (Works with Constraints): إمكانية إلحاق دوال whereNumber وname بمسار المتحكم كالمعتاد.
PHP
<?php
namespace App\Http\Controllers;

class OrderController extends Controller {
    public function show(int $id, string $f = 'all') {
        return ['order_id' => $id, 'format' => $f];
    }
}

عندما تشير عدة مسارات متتالية إلى دوال مختلفة داخل نفس كلاس المتحكم، يمكنك التخلص من تكرار كتابة اسم الكلاس عبر دالة Route::controller. داخل مجموعة المتحكم، تكتفي بتمرير اسم الدالة النصي فقط كمعامل ثانٍ لكل مسار.

  • مجموعة المتحكم الموحدة (Route::controller Group): تحدد كلاس المتحكم مرة واحدة لكافة المسارات الفرعية بالمجموعة.
  • كتابة اسم الدالة فقط (Method Name Only): يُمرر اسم الإجراء كنص بسيط مثل 'show' دون تكرار مصفوفة الكلاس.
  • الدمج مع البادئات (Combines with Prefix/Name): يمكن دمجها مع prefix وname لبناء مجموعة مسارات متكاملة.
PHP
<?php
use App\Http\Controllers\ItemController;
use Illuminate\Support\Facades\Route;
Route::controller(ItemController::class)->group(
    function () {
        Route::get('/items/{id}', 'show');
    }
);

يرتكز قرار الانتقال من الدوال المغلقة إلى كلاسات المتحكمات على إبقاء ملف المسارات نظيفاً وقابلاً للاختبار والتخزين المؤقت. يوضح الجدول المقارن التالي لماذا تعتمد تطبيقات Laravel الاحترافية على المتحكمات كمعيار أساسي.

وجه المقارنة الهندسيالأسلوب اليدوي أو التقليديمعيار Laravel 12 الحديث
موضع منطق المعالجةتكديس مئات الأسطر من الدوال المغلقة داخل ملف routes/web.phpفصل العمليات في كلاسات مستقلة داخل app/Http/Controllers
صياغة ربط المسارالنصوص القديمة التي لا تدعم الانتقال التلقائي في المحررمصفوفة قياسية [ProductController::class, 'show'] مدعومة بالكامل
تكرار اسم المتحكمإعادة كتابة اسم الكلاس في عشرات المسارات المتتاليةتجميع أنيق عبر Route::controller مع كتابة اسم الدالة فقط
إنشاء ملفات الكلاساتنسخ الملفات يدوياً وتعديل فضاء الأسماء في كل مرةتوليد فوري ومضبوط عبر الأمر php artisan make:controller
PHP
# View all routes mapped to their controller actions
php artisan route:list --except-vendor

# Filter route list by a specific URI path
php artisan route:list --path=items
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «إنشاء المتحكمات البرمجية في Laravel وربطها بالمسارات» مفاهيم أهمية فصل المنطق داخل المتحكمات، وتوليد كلاس المتحكم بأمر Artisan، وربط المسارات بدوال كلاس المتحكم وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «المتحكمات أحادية الإجراء القابلة للاستدعاء في Laravel» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Basic Controllers إنشاء المتحكمات
توليد كلاسات المتحكمات بأوامر Artisan ونقل منطق المعالجة إليها وربطها بالمسارات بطريقة منظمة وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
للمراجعة
02 Why Move Logic to Controllers أهمية فصل المنطق داخل المتحكمات
المفهوم الهندسي والتطبيق العملي المباشر لقسم أهمية فصل المنطق داخل المتحكمات في إطار العمل Laravel 12.
للمراجعة
03 Generating Controllers via Artisan توليد كلاس المتحكم بأمر Artisan
المفهوم الهندسي والتطبيق العملي المباشر لقسم توليد كلاس المتحكم بأمر Artisan في إطار العمل Laravel 12.
للمراجعة
04 Linking Routes to Class Methods ربط المسارات بدوال كلاس المتحكم
المفهوم الهندسي والتطبيق العملي المباشر لقسم ربط المسارات بدوال كلاس المتحكم في إطار العمل Laravel 12.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 MVC MVC
Model View Controller
النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
للمراجعة
02 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
للمراجعة
03 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
للمراجعة
04 PSR PSR
PHP Standards Recommendations
المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «أهمية فصل المنطق داخل المتحكمات» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «توليد كلاس المتحكم بأمر Artisan» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من أهمية فصل المنطق داخل المتحكمات في إطار العمل Laravel 12؟

يسهم أهمية فصل المنطق داخل المتحكمات في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «توليد كلاس المتحكم بأمر Artisan» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة ربط المسارات بدوال كلاس المتحكم بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة ربط المسارات بدوال كلاس المتحكم.

04

لماذا يُعد تطبيق تمرير معاملات المسار لدالة المتحكم مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق تجميع المسارات لنفس كلاس المتحكم في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في مقارنة الدوال المغلقة والمتحكمات؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.