في هذا الدرس 6تصفّح المواضيع
لاندرج جميع العمليات في تطبيقات الويب ضمن الإجراءات التقليدية، مثل توليد تقرير مالي معقد أو معالجة إشعار دفع خارجي أو تصدير ملف مضغوط. تخصص المتحكمات أحادية الإجراء كلاساً كاملاً لعملية واحدة مركزة، مما يحقق مبدأ المسؤولية الواحدة في هندسة البرمجيات.
- مسؤولية واحدة مركزة (Focused Responsibility): يختص الكلاس بمعالجة عملية واحدة دون تضخيم المتحكمات الأخرى.
- تسمية تعبر عن المهمة (Task-Based Naming): يُسمى الكلاس باسم الفعل والمهمة مثل GenerateInvoicePdfController.
- عزل الاعتماديات (Isolated Dependencies): الخدمات المحقونة في الباني تخص هذا الإجراء وحده دون غيره.
<?php
namespace App\Http\Controllers;
class PublishCatalogController extends Controller {
public function __invoke(): array {
return ['status' => 'Catalog Published'];
}
}
تعتمد المتحكمات أحادية الإجراء على الدالة السحرية المدمجة في لغة PHP وهي __invoke، والتي تعمل تلقائياً عند استدعاء الكائن البرمجي كأنه دالة. وعندما يجد موجه Laravel كلاس متحكم مسجلاً في المسار بدون اسم دالة، فإنه يوجه الطلب مباشرة نحو دالة __invoke.
- الدالة السحرية (PHP Magic Method): تُعرف بالاسم القياسي public function __invoke داخل الكلاس.
- كائن قابل للاستدعاء (Callable Object): تجعل الكائن قابلاً للتنفيذ المباشر تماماً مثل الدوال.
- دعم الدوال المساعدة (Helper Methods Allowed): يمكنك إضافة دوال مساعدة خاصة private لتقسيم الخطوات الداخلية.
<?php
namespace App\Http\Controllers;
class CalculateTaxController extends Controller {
public function __invoke(): array {
return ['rate' => $this->rate()];
}
private function rate(): float { return 0.15; }
}
يمكنك توليد كلاس متحكم أحادي الإجراء جاهز بسطر واحد عبر تمرير الخيار --invokable أو اختصاره السريع -i مع الأمر php artisan make:controller. ينشئ Artisan ملف الكلاس داخل مجلد المتحكمات متضمناً هيكل دالة __invoke تلقائياً.
- الخيار الصريح (--invokable Flag): يولد كلاس متحكم يحتوي على دالة __invoke الجاهزة فقط.
- الاختصار السريع (-i Shorthand): حرف مختصر يؤدي نفس الغرض بسرعة في الطرفية.
- دعم المجلدات الفرعية (Subfolder Support): يدعم إنشاء الكلاس داخل مجلدات منظمة حسب الميزة.
# Generate an invokable controller via full flag
php artisan make:controller SyncController --invokable
# Generate using the short -i flag
php artisan make:controller ExportOrdersController -i
يمتاز تسجيل مسار المتحكم الأحادي في ملف routes/web.php ببساطته الشديدة، إذ لا يحتاج إلى مصفوفة ثنائية تضم اسم الدالة. يكفي تمرير اسم الكلاس مع الثابت ::class مباشرة كمعامل ثانٍ لدالة المسار.
- الإشارة المباشرة للكلاس (Direct Class Reference): تمرير اسم الكلاس متبوعاً بـ ::class مباشرة دون أقواس مصفوفة.
- جميع طرق الطلب (Any HTTP Verb): يعمل مع كافة دوال التوجيه مثل get وpost وput وdelete.
- دعم السلاسل البرمجية (Full Chain Support): يقبل إلحاق دوال التسمية name والقيود where كأي مسار قياسي.
<?php
use App\Http\Controllers\ExportCsvController;
use App\Http\Controllers\SyncOrderController;
use Illuminate\Support\Facades\Route;
Route::post('/orders/sync', SyncOrderController::class)
->name('orders.sync');
Route::get('/export', ExportCsvController::class);
تُمرر معاملات الرابط الديناميكية الإلزامية والاختيارية مباشرة إلى معاملات دالة __invoke بنفس الطريقة المتبعة في دوال المتحكمات القياسية. كما يمكنك دمج حقن الخدمات مع معاملات الرابط داخل توقيع دالة __invoke بكل سلاسة.
- استقبال معاملات الرابط (Route Segment Injection): تمرير قيم الأقواس المعقوفة مباشرة إلى معاملات __invoke.
- القيم الافتراضية (Optional Defaults): دعم المعاملات الاختيارية في الرابط بإسناد قيمة افتراضية للمتغير.
- سهولة الاختبار (Clean Testing): سهولة اختبار الكلاس بشكل مستقل نظراً لتخصصه في عملية واحدة.
<?php
namespace App\Http\Controllers;
class ExportPdfController extends Controller {
public function __invoke(int $id, string $f = 'A') {
return ['invoice' => $id, 'format' => $f];
}
}
تجمع فرق التطوير الحديثة بين المتحكمات القياسية للعمليات الأساسية والمتحكمات أحادية الإجراء للعمليات التخصصية المستقلة. قارن بين النمطين في الجدول المرجعي التالي لاختيار البنية الأنسب لكل ميزة في مشروعك.
| وجه المقارنة الهندسي | الأسلوب اليدوي أو التقليدي | معيار Laravel 12 الحديث |
|---|---|---|
| العمليات غير القياسية | تكديس عشرات الدوال الفرعية للتقارير والتصدير داخل متحكم واحد | فصل كل عملية خاصة في متحكم أحادي الإجراء مستقل ومنظم |
| تسجيل المسار | الاضطرار لكتابة مصفوفة باسم الكلاس واسم الدالة في كل مرة | تمرير اسم الكلاس مباشرة مثل ExportOrdersController::class |
| حقن الاعتماديات | حقن خدمات كثيرة في الباني رغم استخدامها في دالة واحدة فقط | قصر الخدمات المحقونة على ما يحتاجه هذا الإجراء الوحيد فقط |
| توليد الكلاس | إنشاء الملف يدوياً وكتابة هيكل الدالة السحرية من الصفر | توليد فوري عبر الأمر php artisan make:controller -i |
<?php
use App\Http\Controllers\ExportPdfController;
use Illuminate\Support\Facades\Route;
Route::get('/pdf/{id}/{f?}', ExportPdfController::class)
->whereNumber('id')
->name('invoices.download');
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «المتحكمات أحادية الإجراء القابلة للاستدعاء في Laravel» مفاهيم مفهوم المتحكمات أحادية الإجراء، وآلية عمل الدالة السحرية __invoke، وإنشاء متحكم أحادي بالخيار invokable وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «متحكمات الموارد القياسية وحقن الاعتماديات في Laravel» للبناء التراكمي على ما تعلمته.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Invokable Actions أحادية الإجراء
- بناء متحكمات مخصصة لإجراء واحد باستخدام الدالة السحرية __invoke لتنظيم العمليات المعقدة وفق أحدث معايير إطار العمل Laravel 12 مع أمثلة وتطبيقات عملية متدرجة.
- للمراجعة
- 02 Concept of Single Action Classes مفهوم المتحكمات أحادية الإجراء
- المفهوم الهندسي والتطبيق العملي المباشر لقسم مفهوم المتحكمات أحادية الإجراء في إطار العمل Laravel 12.
- للمراجعة
- 03 Understanding PHP invoke Method آلية عمل الدالة السحرية __invoke
- المفهوم الهندسي والتطبيق العملي المباشر لقسم آلية عمل الدالة السحرية __invoke في إطار العمل Laravel 12.
- للمراجعة
- 04 Creating Invokable via Artisan CLI إنشاء متحكم أحادي بالخيار invokable
- المفهوم الهندسي والتطبيق العملي المباشر لقسم إنشاء متحكم أحادي بالخيار invokable في إطار العمل 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 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «آلية عمل الدالة السحرية __invoke» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من مفهوم المتحكمات أحادية الإجراء في إطار العمل Laravel 12؟
يسهم مفهوم المتحكمات أحادية الإجراء في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «آلية عمل الدالة السحرية __invoke» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة إنشاء متحكم أحادي بالخيار invokable بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة إنشاء متحكم أحادي بالخيار invokable.
لماذا يُعد تطبيق تسجيل مسار المتحكم الأحادي مباشرة مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق تمرير معاملات الرابط لدالة __invoke في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في مقارنة المتحكم القياسي والأحادي؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.