في هذا الدرس 6تصفّح المواضيع
رغم أن الدوال المغلقة داخل ملف المسارات مفيدة للأمثلة السريعة، إلا أن وضع منطق الأعمال الفعلي بداخلها يحول ملف المسارات إلى ملف ضخم يصعب صيانته. تتيح لك المتحكمات Controllers تجميع العمليات المترابطة مثل عرض المنتجات وتحديثها داخل كلاسات PHP منظمة في مجلد app/Http/Controllers.
- نقافة ملف المسارات (Clean Route Files): يبقى ملف routes/web.php فهرساً مختصراً وواضحاً يوجه الروابط نحو الكلاسات.
- الترابط المنطقي (Logical Cohesion): جمع كافة إجراءات المورد الواحد داخل كلاس متحكم واحد يسهل صيانته.
- دعم حاوي الخدمات (Service Container Support): تتمتع كلاسات المتحكمات بميزة الحقن التلقائي للاعتماديات في الباني والدوال.
<?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.
# 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
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
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
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 |
# 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب ونفّذ المثال البرمجي المشروح في قسم «أهمية فصل المنطق داخل المتحكمات» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «توليد كلاس المتحكم بأمر Artisan» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من أهمية فصل المنطق داخل المتحكمات في إطار العمل Laravel 12؟
يسهم أهمية فصل المنطق داخل المتحكمات في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «توليد كلاس المتحكم بأمر Artisan» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة ربط المسارات بدوال كلاس المتحكم بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة ربط المسارات بدوال كلاس المتحكم.
لماذا يُعد تطبيق تمرير معاملات المسار لدالة المتحكم مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق تجميع المسارات لنفس كلاس المتحكم في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في مقارنة الدوال المغلقة والمتحكمات؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.