class Laravel Event ve Listener Nedir? extends Post
@created_at(
"2025-01-14 07:29"
)
@tag(
"laravel"
)
@tag(
"event"
)
@tag(
"listener"
)
### Laravel Event ve Listener Nedir?
Laravel, uygulamanızdaki belirli işlemlere veya olaylara (event) tepki verebilmek için **Event-Listener** mimarisini kullanır. Bu yapı, uygulamanın belirli noktalarında tetiklenen olaylara (event) çeşitli işlevler (listener) atayarak çalışır. Böylece, kodunuzu daha modüler ve yönetilebilir hale getirebilirsiniz.
#### Event ve Listener’ın Amaçları:
- **Gevşek Bağlılık (Loose Coupling):** Kod parçalarını birbiriyle daha az bağımlı hale getirir.
- **Modülerlik:** Bir işlemin birden fazla sonucu olduğunda, her bir sonucu ayrı listener olarak tanımlayabilirsiniz.
- **Kolay Yönetim:** Olayları dinlemek ve gerektiğinde farklı işlevler eklemek çok daha kolaydır.
---
### Event ve Listener Nasıl Çalışır?
- **Event:** Uygulamada meydana gelen bir olayı temsil eder. Örneğin, bir kullanıcı kayıt olduğunda bir `UserRegistered` event tetiklenebilir.
- **Listener:** Event tetiklendiğinde bu olaya tepki veren bir işlemi tanımlar.
---
### Event ve Listener Oluşturma
Laravel, `php artisan` komutlarını kullanarak kolayca event ve listener oluşturmanıza olanak sağlar.
#### Adım 1: Event ve Listener Oluşturma
php artisan make:event UserRegistered
php artisan make:listener SendWelcomeEmail --event=UserRegistered
- **`UserRegistered`:** Yeni bir event sınıfı oluşturur.
- **`SendWelcomeEmail`:** `UserRegistered` olayını dinleyen bir listener oluşturur.
#### Adım 2: Event Sınıfını Düzenleme
`app/Events/UserRegistered.php` dosyası şu şekilde olabilir:
<?php
namespace App\Events;
use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserRegistered
{
use Dispatchable, SerializesModels;
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
}
Bu event, bir kullanıcı nesnesini (User) içerir ve tetiklendiğinde dinleyicilere bu kullanıcı bilgisini iletir.
---
#### Adım 3: Listener Sınıfını Düzenleme
`app/Listeners/SendWelcomeEmail.php` dosyası şu şekilde olabilir:
<?php
namespace App\Listeners;
use App\Events\UserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Mail;
class SendWelcomeEmail
{
public function __construct()
{
// Gerekirse bağımlılıkları burada tanımlayabilirsiniz.
}
public function handle(UserRegistered $event)
{
$user = $event->user;
// Kullanıcıya hoş geldiniz e-postası gönderme işlemi
Mail::to($user->email)->send(new \App\Mail\WelcomeMail($user));
}
}
---
#### Adım 4: Event-Listener İlişkisi Tanımlama
`EventServiceProvider` dosyasında bu ilişkiyi tanımlamalısınız:
`app/Providers/EventServiceProvider.php`
protected $listen = [
\App\Events\UserRegistered::class => [
\App\Listeners\SendWelcomeEmail::class,
],
];
---
#### Adım 5: Event’i Tetikleme
Bir kullanıcı kayıt olduğunda bu olayı tetiklemek için şu şekilde bir çağrı yapabilirsiniz:
use App\Events\UserRegistered;
// Örnek bir kullanıcı kaydı
$user = User::create([
'name' => 'Atilla',
'email' => 'atilla@example.com',
'password' => bcrypt('password'),
]);
// Event'i tetikle
event(new UserRegistered($user));
---
### Basit Örnek: Log Mesajı Yazdırma
Bir event tetiklendiğinde log dosyasına bir mesaj yazdırmak isterseniz:
#### Listener
`app/Listeners/LogUserRegistered.php`
<?php
namespace App\Listeners;
use App\Events\UserRegistered;
use Illuminate\Support\Facades\Log;
class LogUserRegistered
{
public function handle(UserRegistered $event)
{
Log::info('Yeni bir kullanıcı kayıt oldu: ' . $event->user->email);
}
}
#### EventServiceProvider’a Ekleyin
protected $listen = [
\App\Events\UserRegistered::class => [
\App\Listeners\SendWelcomeEmail::class,
\App\Listeners\LogUserRegistered::class,
],
];
Bu sayede, `UserRegistered` tetiklendiğinde hem e-posta gönderilir hem de log dosyasına mesaj yazılır.
---
### Queue Kullanımı
Eğer bir listener işlemini sıraya (queue) almak isterseniz, listener sınıfınıza `ShouldQueue` arayüzünü ekleyin:
use Illuminate\Contracts\Queue\ShouldQueue;
class SendWelcomeEmail implements ShouldQueue
{
// Queue işlemleri otomatik olarak burada çalışır.
}
---
### Özet
Laravel Event-Listener yapısı, olay bazlı iş akışlarını yönetmek için güçlü bir araçtır. Olayların gevşek bağlılıkla yönetilmesi, kodun okunabilirliğini artırır ve ölçeklenebilirliği kolaylaştırır. Event ve listener’ları düzenli bir şekilde kullanarak uygulamanızı daha modüler ve işlevsel hale getirebilirsiniz.