คอนเทนเนอร์ DependencyInjection
ลงทะเบียนบริการและเชื่อมโยงการพึ่งพาด้วยคอนเทนเนอร์ DI ของ Symfony
คอนเทนเนอร์ DependencyInjection เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
Dependency Injection คืออะไร
Dependency Injection (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());บริการแบบใช้ร่วมกันเทียบกับแบบไม่ใช้ร่วมกัน
โดยค่าเริ่มต้น บริการจะใช้ร่วมกัน (ซิงเกิลตัน) ตั้งค่า shared(false) เพื่อรับอินสแตนซ์ใหม่ทุกครั้งที่ดึงบริการ
สรุป
คอนเทนเนอร์ DI ของ Symfony ใช้ลงทะเบียน เชื่อมสาย และแก้ไขบริการ ใช้การเชื่อมสายอัตโนมัติเพื่อความสะดวก ใช้พารามิเตอร์สำหรับการกำหนดค่า และคอมไพล์คอนเทนเนอร์ในโปรดักชันเพื่อเพิ่มประสิทธิภาพ
ตรวจสอบอย่างรวดเร็ว
การเชื่อมสายอัตโนมัติทำอะไรในคอนเทนเนอร์ DI ของ Symfony
คำถามที่พบบ่อย
บทเรียน “คอนเทนเนอร์ DependencyInjection” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คอนเทนเนอร์ DependencyInjection” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คอนเทนเนอร์ DependencyInjection”
ลงทะเบียนบริการและเชื่อมโยงการพึ่งพาด้วยคอนเทนเนอร์ DI ของ Symfony คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “คอนเทนเนอร์ DependencyInjection” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- HttpFoundation: คำขอและการตอบกลับ
- คอนเทนเนอร์ DependencyInjection
- EventDispatcher: อีเวนต์แบบแยกส่วน
- คอมโพเนนต์คอนโซล: คำสั่ง CLI