0Pricing
PHP Academy · บทเรียน

EventDispatcher: อีเวนต์แบบแยกส่วน

ส่งและรับฟังอีเวนต์โดยใช้ EventDispatcher ของ Symfony

EventDispatcher: อีเวนต์แบบแยกส่วน เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

EventDispatcher คืออะไร

Symfony EventDispatcher ใช้รูปแบบ Observer โค้ดจะส่งเหตุการณ์ และตัวรับฟังจะตอบสนองต่อเหตุการณ์เหล่านั้น โดยตัวกระจายเหตุการณ์ไม่จำเป็นต้องรู้จักตัวรับฟัง

การติดตั้ง

ติดตั้งคอมโพเนนต์

$ composer require symfony/event-dispatcher

การสร้างเหตุการณ์

เหตุการณ์คือคลาส PHP ธรรมดา ซึ่งมักสืบทอดจาก Event (ไม่บังคับ) และใช้เก็บข้อมูล

<?php
use Symfony\Contracts\EventDispatcher\Event;

class UserRegisteredEvent extends Event
{
    public const NAME = "user.registered";

    public function __construct(public readonly User $user) {}
}

การสร้างตัวรับฟัง

ตัวรับฟังคือสิ่งที่เรียกใช้ได้หรือออบเจ็กต์ที่ตอบสนองต่อเหตุการณ์เฉพาะ

<?php
class SendWelcomeEmailListener
{
    public function __invoke(UserRegisteredEvent $event): void
    {
        mail($event->user->email, "Welcome!", "Thanks for joining!");
    }
}

การลงทะเบียนตัวรับฟัง

แนบตัวรับฟังเข้ากับตัวกระจายเหตุการณ์

<?php
use Symfony\Component\EventDispatcher\EventDispatcher;

$dispatcher = new EventDispatcher();
$dispatcher->addListener(
    UserRegisteredEvent::NAME,
    new SendWelcomeEmailListener()
);

การกระจายเหตุการณ์

กระจายเหตุการณ์ ตัวรับฟังที่ลงทะเบียนไว้ทั้งหมดจะถูกเรียกตามลำดับความสำคัญ

<?php
$user = new User("alice@example.com");
$dispatcher->dispatch(new UserRegisteredEvent($user), UserRegisteredEvent::NAME);

ลำดับความสำคัญของตัวรับฟัง

ส่งจำนวนเต็มลำดับความสำคัญเป็นอาร์กิวเมนต์ตัวที่สามให้กับ addListener() ตัวเลขที่สูงกว่าจะทำงานก่อน (ค่าเริ่มต้น: 0)

<?php
$dispatcher->addListener("user.registered", $logListener, 10);   // runs first
$dispatcher->addListener("user.registered", $emailListener, 0);  // runs second

ตัวสมัครรับเหตุการณ์

ตัวสมัครรับเหตุการณ์คือคลาสที่ลงทะเบียนตัวรับฟังของตนเองโดยใช้อินเทอร์เฟซ EventSubscriberInterface

<?php
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class UserSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array {
        return [
            UserRegisteredEvent::NAME => "onUserRegistered",
        ];
    }

    public function onUserRegistered(UserRegisteredEvent $event): void {
        // ...
    }
}

การหยุดการเผยแพร่

เรียก $event->stopPropagation() ภายในตัวรับฟังเพื่อป้องกันไม่ให้ตัวรับฟังถัดไปทำงาน

ใน Laravel

Laravel มีระบบเหตุการณ์ของตนเอง กระจายเหตุการณ์ด้วย event(new UserRegistered($user)) ลงทะเบียนตัวรับฟังใน EventServiceProvider หรือใช้แอตทริบิวต์ #[Listen]

ประโยชน์ของสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์

เหตุการณ์ช่วยลดการเชื่อมโยงระหว่างคอมโพเนนต์ บริการลงทะเบียนไม่จำเป็นต้องนำเข้าบริการอีเมล คุณสามารถเพิ่มพฤติกรรมใหม่ เช่น การบันทึกข้อมูลหรือการวิเคราะห์ ได้ด้วยการลงทะเบียนตัวรับฟังใหม่โดยไม่ต้องแก้ไขโค้ดเดิม

สรุป

สร้างคลาสเหตุการณ์พร้อมข้อมูล แนบตัวรับฟังด้วย addListener() และกระจายเหตุการณ์ด้วย $dispatcher->dispatch() ใช้ตัวสมัครรับเหตุการณ์สำหรับกลุ่มตัวรับฟังที่ลงทะเบียนตัวเอง

ตรวจสอบอย่างรวดเร็ว

คุณจะหยุดไม่ให้ตัวรับฟังถัดไปทำงานได้อย่างไร

คำถามที่พบบ่อย

บทเรียน “EventDispatcher: อีเวนต์แบบแยกส่วน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “EventDispatcher: อีเวนต์แบบแยกส่วน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “EventDispatcher: อีเวนต์แบบแยกส่วน”

ส่งและรับฟังอีเวนต์โดยใช้ EventDispatcher ของ Symfony คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “EventDispatcher: อีเวนต์แบบแยกส่วน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม

ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. HttpFoundation: คำขอและการตอบกลับ
  2. คอนเทนเนอร์ DependencyInjection
  3. EventDispatcher: อีเวนต์แบบแยกส่วน
  4. คอมโพเนนต์คอนโซล: คำสั่ง CLI
← กลับไปที่ PHP Academy