حاوية DependencyInjection
سجّلوا الخدمات ووصلوا التبعيات باستخدام حاوية DI في Symfony
حاوية DependencyInjection درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
ما هو حقن التبعيات؟
حقن التبعيات (DI) هو نمط تتلقى فيه الفئة تبعياتها من الخارج بدلًا من إنشائها داخليًا، مما يجعل الشيفرة قابلة للاختبار ومقترنة بشكل ضعيف.
مكوّن DI في Symfony
يوفّر مكوّن symfony/dependency-injection في Symfony حاوية IoC قوية يمكنها توصيل الخدمات تلقائيًا، وتهيئة تعريفات الخدمات، وتخزينها مؤقتًا.
$ composer require symfony/dependency-injectionإنشاء حاوية
أنشئ حاوية وسجّل الخدمات.
<?php
use Symfony\Component\DependencyInjection\ContainerBuilder;
$container = new ContainerBuilder();
// Register a service:
$container->register("logger", \App\Logger::class);إضافة معاملات المُنشئ
مرّر معاملات المُنشئ إلى تعريفات الخدمات.
<?php
$container->register("mailer", \App\Mailer::class)
->addArgument("smtp.example.com")
->addArgument(587);مراجع الخدمات
احقن خدمة داخل خدمة أخرى باستخدام Reference.
<?php
use Symfony\Component\DependencyInjection\Reference;
$container->register("email_service", \App\EmailService::class)
->addArgument(new Reference("mailer"))
->addArgument(new Reference("logger"));استرداد خدمة
اجلب خدمة من الحاوية. تُحلّ التبعيات تلقائيًا.
<?php
$emailService = $container->get("email_service");
$emailService->send("user@example.com", "Welcome!");التوصيل التلقائي
عند تفعيل التوصيل التلقائي، تفحص الحاوية تلميحات الأنواع وتحقن الخدمات المطابقة تلقائيًا.
<?php
$container->register(EmailService::class)
->setAutowired(true);
// Constructor is: public function __construct(Mailer $mailer, Logger $logger)المعاملات
خزّن قيم التهيئة كمعاملات في الحاوية.
<?php
$container->setParameter("mailer.host", "smtp.example.com");
$container->setParameter("mailer.port", 587);
// Reference in service definition:
$container->register("mailer", Mailer::class)
->addArgument("%mailer.host%")
->addArgument("%mailer.port%");تهيئة YAML
عرّف الخدمات باستخدام YAML (يتطلب symfony/config وsymfony/yaml).
# services.yaml
services:
App\Mailer:
arguments:
- "%mailer.host%"
- "%mailer.port%"تجميع الحاوية
جمّع الحاوية لتحسين الأداء. يتحقق ذلك من صحة التعريفات ويحسّن مخطط الخدمات.
<?php
$container->compile();
// Dump to PHP cache file:
$dumper = new PhpDumper($container);
file_put_contents("CachedContainer.php", $dumper->dump());الخدمات المشتركة وغير المشتركة
تكون الخدمات مشتركة افتراضيًا (singleton). اضبط shared(false) للحصول على مثيل جديد في كل مرة تُسترد فيها الخدمة.
الملخص
تسجّل حاوية DI في Symfony الخدمات وتوصلها وتحلّ تبعياتها. استخدم التوصيل التلقائي لتسهيل العمل، والمعاملات للتهيئة، واجمع الحاوية في بيئة الإنتاج لتحسين الأداء.
تحقق سريع
ما وظيفة التوصيل التلقائي في حاوية DI في Symfony؟
الأسئلة الشائعة
هل درس «حاوية DependencyInjection» مجاني؟
نعم — نص درس «حاوية DependencyInjection» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «حاوية DependencyInjection»؟
سجّلوا الخدمات ووصلوا التبعيات باستخدام حاوية DI في Symfony تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «حاوية DependencyInjection»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- HttpFoundation: الطلب والاستجابة
- حاوية DependencyInjection
- EventDispatcher: الأحداث غير المقترنة
- مكوّن Console: أوامر CLI