تكرار السؤال: …
الإجابة المختصرة
الـ Listener يستمع لحدث واحد محدد، بينما الـ Subscriber هو فئة تستطيع الاشتراك في عدة أحداث مختلفة وتحديد دوال معالجة مخصصة لكل منها.
الشرح
تساعد الأحداث في تطبيق معمارية مفككة الارتباط (Decoupled Architecture). الـ Listener يركز على حدث منفرد مثل OrderShippedListener. أما الـ Event Subscriber فيسمح بتجميع منطق إدارة نطاق كامل (مثل UserEventSubscriber) للاستماع لأحداث تسجيل الدخول، وتغيير كلمة المرور، وتسجيل الخروج داخل فئة واحدة عبر دالة subscribe($events).
مثال بالكود
class UserEventSubscriber {
public function handleLogin($event): void {}
public function handleLogout($event): void {}
public function subscribe(Dispatcher $events): array {
return [
Login::class => 'handleLogin',
Logout::class => 'handleLogout',
];
}
}أخطاء شائعة
- عدم تفعيل واجهة ShouldQueue على الـ Listeners الثقيلة مما يؤدي لتأخير استجابة الـ HTTP للمستخدم.