Laravel

Laravel Event & Listener Kullanımı

Laravel Event & Listener Kullanımı: Modüler ve Esnek Uygulama Geliştirme

Laravel, modern web uygulamaları geliştirirken kullanıcı deneyimini artırmak ve kodunuzu daha modüler hale getirmek için Event (Olay) ve Listener (Dinleyici) yapısını sunar. Bu yapı, uygulama içindeki önemli olayları dinleyerek belirli işlemleri otomatik olarak çalıştırmanızı sağlar. Bu makalede, Laravel’de Event ve Listener oluşturmayı, nasıl çalıştığını ve kullanım senaryolarını detaylı bir şekilde inceleyeceğiz.


1️⃣ Event & Listener Nedir ve Neden Kullanılır?

Event (Olay), uygulama içinde bir olay gerçekleştiğinde tetiklenen mekanizmadır. Örneğin, bir kullanıcının kayıt olması, bir siparişin tamamlanması veya bir dosyanın yüklenmesi gibi olaylar birer event olabilir.

Listener (Dinleyici), bir event tetiklendiğinde çalıştırılacak işlemleri içerir. Örneğin, bir kullanıcı kayıt olduğunda hoş geldin e-postası göndermek veya bir sipariş tamamlandığında bildirim göndermek gibi işlemler birer listener olabilir.

Event & Listener Kullanmanın Avantajları:

  • Modüler Kod Yapısı: Kodunuzu daha düzenli ve yönetilebilir hale getirir.
  • Performans Artışı: Ağır işlemleri asenkron olarak çalıştırarak uygulamanın hızını artırır.
  • Esneklik: Belirli bir olay olduğunda dinleyiciyi değiştirebilir veya yeni dinleyiciler ekleyebilirsiniz.
  • Kod Tekrarını Önler: Ortak işlemleri tek bir yerde toplayarak kod tekrarını önler.

2️⃣ Laravel’de Event & Listener Kullanımı

Laravel’de Event ve Listener oluşturmak oldukça kolaydır. İşte adım adım kullanım süreci:

a) Event ve Listener Oluşturma

Event ve Listener’ları tek bir Artisan komutuyla oluşturabilirsiniz. Örneğin, bir kullanıcı kayıt olduğunda tetiklenecek bir event ve bu event’i dinleyecek bir listener oluşturalım:

php artisan make:event UserRegistered
php artisan make:listener SendWelcomeEmail --event=UserRegistered

Bu komutlar, app/Events/UserRegistered.php ve app/Listeners/SendWelcomeEmail.php dosyalarını oluşturur.

b) Event Sınıfı (Olay Tanımlama)

Event sınıfı, tetiklendiğinde taşınacak verileri içerir. Örneğin, bir kullanıcı kayıt olduğunda kullanıcı bilgilerini taşıyan bir event oluşturalım:

namespace App\Events;

use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use App\Models\User;

class UserRegistered
{
    use Dispatchable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

Bu event, bir kullanıcı kayıt olduğunda tetiklenecek ve $user bilgilerini taşıyacaktır.

c) Listener Sınıfı (Olayı Dinleyici Tanımlama)

Listener sınıfı, event tetiklendiğinde çalıştırılacak işlemleri içerir. Örneğin, bir kullanıcı kayıt olduğunda hoş geldin e-postası göndermek için:

namespace App\Listeners;

use App\Events\UserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Mail;
use App\Mail\WelcomeMail;

class SendWelcomeEmail implements ShouldQueue
{
    use InteractsWithQueue;

    public function handle(UserRegistered $event)
    {
        Mail::to($event->user->email)->send(new WelcomeMail($event->user));
    }
}
  • ShouldQueue: İşleri kuyruğa alarak arka planda çalıştırır.
  • InteractsWithQueue: Listener’ın kuyruk işlemlerini yönetmesini sağlar.

d) Event’i Tetikleme

Event’i tetiklemek için event() fonksiyonunu kullanabilirsiniz. Örneğin, bir kullanıcı kayıt olduğunda UserRegistered event’ini tetikleyelim:

use App\Events\UserRegistered;
use App\Models\User;

public function register(Request $request)
{
    $user = User::create($request->all());

    event(new UserRegistered($user)); // Event'i tetikle

    return response()->json(['message' => 'Kayıt başarılı!']);
}

Bu sayede, bir kullanıcı kayıt olduğunda UserRegistered event’i tetiklenecek ve SendWelcomeEmail listener’ı çalışacaktır.


3️⃣ Event & Listener Kayıt İşlemleri

Laravel, EventServiceProvider.php dosyasında event’leri ve listener’ları otomatik olarak yönetir. Örneğin, UserRegistered event’ini ve SendWelcomeEmail listener’ını kaydedelim:

protected $listen = [
    UserRegistered::class => [
        SendWelcomeEmail::class,
    ],
];

Laravel 8 ve sonraki sürümlerde event discovery (otomatik keşif) özelliği olduğu için, elle eklemenize gerek yoktur. Ancak, yeni bir event veya listener oluşturduktan sonra listeyi güncellemek için aşağıdaki komutu kullanabilirsiniz:

php artisan event:cache

4️⃣ Queue Kullanımı ile Performans Optimizasyonu

Event’leri asenkron (arka plan) olarak çalıştırmak için queue (kuyruk) sistemi kullanabilirsiniz. Listener sınıfında ShouldQueue kullanıldığı için işlemler otomatik olarak kuyruğa alınır. Kuyruk işçisini çalıştırmak için:

php artisan queue:work

Eğer işlemi hemen çalıştırmak istiyorsanız:

php artisan queue:work --daemon

5️⃣ Event & Listener Yönetme Komutları

Laravel, event ve listener’ları yönetmek için birçok komut sunar. İşte en yaygın kullanılan komutlardan bazıları:

  • Tüm Event’leri Listeleme:
php artisan event:list
  • Event’i Manuel Tetikleme (Test İçin):
php artisan event:dispatch App\Events\UserRegistered
  • Event Keşif Sistemini Kapatma:

Eğer event keşif sistemini kapatıp elle tanımlamak istiyorsanız, EventServiceProvider.php dosyasına aşağıdaki satırı ekleyin:

public function shouldDiscoverEvents()
{
    return false;
}

6️⃣ Sonuç

Laravel’in Event & Listener yapısı, uygulamanızı daha modüler, esnek ve performanslı hale getirmek için güçlü bir araçtır. Bu makalede, Laravel’de Event ve Listener oluşturmayı, nasıl çalıştığını ve kullanım senaryolarını öğrendiniz.

Eğer Laravel ile web uygulamaları geliştiriyorsanız, Event ve Listener yapısını kullanarak kodunuzu daha düzenli hale getirebilir ve kullanıcı deneyimini artırabilirsiniz. 🚀


Ek Konu Başlıkları:

  • Event Broadcasting: Gerçek zamanlı olay yayınlama (WebSocket ile entegrasyon).
  • Event Subscribers: Birden fazla event’i tek bir sınıfta dinleme.
  • Custom Event Dispatcher: Özel event dispatcher’lar oluşturma.
  • Event Testing: Event ve Listener’ları test etme yöntemleri.

Web Doktoru

Matematikçi, Adli Bilişim Uzmanı, Bil. Yük. Müh. Full Stack Developer

Son Gönderiler

Laravel’de Real-Time (Gerçek Zamanlı) Bildirimler

Laravel’de Real-Time (Gerçek Zamanlı) Bildirimler Laravel, modern web uygulamalarında gerçek zamanlı bildirimler oluşturmak için güçlü…

19 Mart 2025

Laravel’de Mail Gönderme ve Bildirimler 📩

Laravel’de Mail Gönderme ve Bildirimler Laravel, modern web uygulamaları geliştirirken e-posta gönderimi ve bildirim sistemleri…

18 Mart 2025

Laravel’de File Storage (Dosya Depolama) Kullanımı

Laravel, dosya yükleme ve depolama işlemleri için güçlü bir Storage (Dosya Depolama) mekanizması sunar. Bu mekanizma, yerel…

15 Mart 2025

Laravel’de Çoklu Dil (Localization) Kullanımı

Laravel’de Çoklu Dil (Localization) Kullanımı: Uygulamanızı Küresel Hale Getirin 🌍 Laravel, modern web uygulamaları için…

14 Mart 2025

Laravel’de Test Driven Development (TDD) ve Test Yazımı

Laravel’de Test Driven Development (TDD) ve Test Yazımı: Güvenilir ve Sürdürülebilir Kod Geliştirme Laravel, modern…

13 Mart 2025

Laravel’de Scheduler (Zamanlanmış Görevler) Kullanımı: Otomatik İşlemler ve Zaman Yönetimi

Laravel’de Scheduler (Zamanlanmış Görevler) Kullanımı: Otomatik İşlemler ve Zaman Yönetimi Laravel, modern web uygulamalarında belirli…

12 Mart 2025