Laravel: Observers va Event Listeners – Farqi Nimalarda?
📅 E’lon qilingan sana: 2025-yil 23-aprel
✍️ Muallif: Bert.gent
Agar Laravel bilan biroz ishlagan bo‘lsangiz, observers
va event listeners
larga ko‘zingiz tushgan bo‘lishi mumkin. Avvaliga ular bir-biriga o‘xshab ko‘rinadi: ikkisi ham nimadir sodir bo‘lishini “tinglaydi” va unga javoban kod bajaradi.
Ammo murakkabroq loyihalarda ular aslida turli maqsadlar uchun mo‘ljallanganini tushunib borasiz. Qaysi birini qachon ishlatishni bilish sizning kodingizni ancha soddalashtiradi, tushunarli qiladi va uni kengaytirishni osonlashtiradi.
🔍 Asosiy farqi nimada?
Qisqacha:
-
Observers – Eloquent model hayoti (ya’ni yaratish, yangilash, o‘chirish) bilan bog‘liq holatlar uchun ishlatiladi.
-
Event listeners – Dasturda o‘zingiz yaratgan (custom) hodisalarga javob beradi. Masalan: foydalanuvchi ro‘yxatdan o‘tishi, buyurtma berilishi va hokazo.
👉 Agar model bilan bog‘liq hodisaga javob bermoqchi bo‘lsangiz — observer.
👉 Agar ilovada umumiyroq hodisaga javob bermoqchi bo‘lsangiz — listener.
🧩 Qachon Observer ishlatiladi?
Observerlar — modelga oid biznes mantiqni model va controllerdan ajratib turadi. Ular sizga modelga bog‘liq bo‘lgan holatlar bo‘yicha avtomatik amal bajarishga yordam beradi.
Misol: Post o‘chirilganda log yozish
php artisan make:observer PostObserver --model=Post
// PostObserver.php
public function deleted(Post $post)
{
Log::info("Post '{$post->title}' foydalanuvchi ID: {$post->user_id} tomonidan o‘chirildi.");
}
AppServiceProvider ichida ro‘yxatdan o‘tkazamiz:
Post::observe(PostObserver::class);
✅ Endi har safar post o‘chirilganda log yoziladi — controllerda hech narsa yozishingiz shart emas.
🟢 Observerlar nega foydali?
-
Modelga tegishli mantiq bitta joyda saqlanadi
-
Kodni takrorlashdan qutqaradi
-
Manual chaqirish shart emas — avtomatik ishlaydi
🚀 Qachon Listener ishlatiladi?
Listenerlar — modelga emas, balki umumiy hodisalarga javob beradi.
Misol: Foydalanuvchi ro‘yxatdan o‘tganida
-
Xush kelibsiz xati yuborish
-
Adminlarga bildirishnoma yuborish
-
CRM bilan sinxronizatsiya qilish
php artisan make:event UserRegistered
php artisan make:listener SendWelcomeEmail --event=UserRegistered
php artisan make:listener NotifyAdmin --event=UserRegistered
Event fayl:
class UserRegistered { public function __construct(public User $user) {} }
Controller ichida chaqirish:
event(new UserRegistered($user));
⚡ Listenerlar nega kuchli?
-
Kodni controllerdan ajratadi
-
Queue bilan ishlatib, fon rejimida vazifa bajarish mumkin
-
Har bir listener alohida javobgarlikka ega bo‘ladi
⚖️ Taqqoslash jadvali:
Savol | Observer | Listener |
---|---|---|
Model hayotiy tsikliga bog‘liqmi? | ✅ Ha | ❌ Yo‘q |
Manual chaqirish kerakmi? | ❌ Yo‘q | ✅ Ha |
Maxsus eventga javob beradimi? | ❌ Yo‘q | ✅ Ha |
Bitta eventga bir nechta amal bog‘lash mumkinmi? | ❌ Yo‘q | ✅ Ha |
🧠 Ikkalasini birga ishlatish ham mumkin!
Masalan, foydalanuvchi yaratish observer
orqali aniqlanadi, keyin UserRegistered
event dispatch qilinadi. Shu orqali barcha kerakli ishlar (email, bildirishnoma va h.k.) listenerlar orqali amalga oshiriladi.
🔚 Xulosa
-
Modeldagi o‘zgarishlar uchun — Observer
-
Ilova darajasidagi voqealar uchun — Event + Listener
Shularni ajratib olish Laravel loyihangizni soddalashtiradi, kengaytirishni osonlashtiradi va kodni boshqarish qulay bo‘ladi.