design

Laravel’de Event ve Listener Kullanımı

March 23, 2025

Merhaba arkadaşlar, bugün sizlere Laravel’de Event (Olay) ve Listener (Dinleyici) kullanımını anlatacağım. Event ve Listener yapısı, uygulamanızda gerçekleşen belirli olayları dinlemek ve bu olaylara tepki vermek için kullanılır. Bu yapı, uygulamanızın daha modüler ve esnek olmasını sağlar. Gelin, bu konuları adım adım inceleyelim.


Event ve Listener Nedir?

  • Event (Olay): Uygulamanızda gerçekleşen belirli bir olayı temsil eder. Örneğin, bir kullanıcının kayıt olması veya bir siparişin tamamlanması bir event olabilir.
  • Listener (Dinleyici): Bir event gerçekleştiğinde, bu event’i dinleyen ve tepki veren yapıdır. Örneğin, bir kullanıcı kayıt olduğunda e-posta göndermek bir listener olabilir.


Laravel’de Event ve Listener Oluşturma

Laravel’de event ve listener oluşturmak oldukça kolaydır. Öncelikle, bir event ve bu event’i dinleyen bir listener oluşturalım.


Event Oluşturma:

php artisan make:event UserRegistered


Bu komut, app/Events/UserRegistered.php dosyasını oluşturacaktır. Event dosyasını açarak gerekli özellikleri tanımlayabilirsiniz.


Örnek Event Kodu:

namespace App\Events;

use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UserRegistered
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $user;

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


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


Listener Oluşturma:

php artisan make:listener SendWelcomeEmail


Bu komut, app/Listeners/SendWelcomeEmail.php dosyasını oluşturacaktır. Listener dosyasını açarak handle metodunu düzenleyebilirsiniz.


Örnek Listener Kodu:

namespace App\Listeners;

use App\Events\UserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;

class SendWelcomeEmail
{
    public function handle(UserRegistered $event)
    {
        Mail::to($event->user->email)->send(new WelcomeEmail($event->user));
    }
}

Bu listener, UserRegistered event’i gerçekleştiğinde, kullanıcıya bir hoş geldin e-postası gönderecektir.


Event ve Listener’ı Kaydetme

Event ve listener’ı kullanabilmek için, app/Providers/EventServiceProvider.php dosyasında kaydetmeniz gerekiyor. Örneğin:

protected $listen = [
    'App\Events\UserRegistered' => [
        'App\Listeners\SendWelcomeEmail',
    ],
];

Bu kod, UserRegistered event’i gerçekleştiğinde SendWelcomeEmail listener’ının çalışmasını sağlar.


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;

public function register(Request $request)
{
    // Kullanıcı kayıt işlemi
    $user = User::create($request->all());

    // Event tetikleme
    event(new UserRegistered($user));

    return redirect('/')->with('success', 'Kayıt başarılı!');
}


Bu kod, kullanıcı kayıt olduğunda UserRegistered event’ini tetikler ve SendWelcomeEmail listener’ı çalışır.

Queue ile Asenkron İşlemler

Eğer listener’ın asenkron olarak çalışmasını istiyorsanız, listener’ı ShouldQueue interface’ini implement ederek kuyruğa alabilirsiniz.


Örnek Queue Kullanımı:

namespace App\Listeners;

use App\Events\UserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;

class SendWelcomeEmail implements ShouldQueue
{
    use InteractsWithQueue;

    public function handle(UserRegistered $event)
    {
        Mail::to($event->user->email)->send(new WelcomeEmail($event->user));
    }
}

Bu kod, SendWelcomeEmail listener’ını kuyruğa alır ve asenkron olarak çalıştırır.


Laravel’de Event ve Listener’ın Avantajları

  • Modülerlik: Event ve listener yapısı, uygulamanızın daha modüler olmasını sağlar.
  • Esneklik: Farklı event’ler ve listener’lar oluşturarak, uygulamanızı kolayca genişletebilirsiniz.
  • Asenkron İşlemler: Queue ile listener’ları asenkron olarak çalıştırarak, performansı artırabilirsiniz.



Laravel’de event ve listener kullanımı, uygulamanızda gerçekleşen olayları dinlemek ve bu olaylara tepki vermek için güçlü bir yapı sunar. Eğer uygulamanızın daha modüler ve esnek olmasını istiyorsanız, event ve listener’ları mutlaka kullanmalısınız. Bir sonraki yazımda, Laravel’de API Güvenliği: JWT ve OAuth2 Entegrasyonu konusuna değineceğim. Görüşmek üzere!

7 + 2 =