event Olay İşleme
webman/event
, iş koduna müdahale etmeden bazı iş mantığını gerçekleştirmenizi ve iş modülleri arasındaki bağı çözmenizi sağlayan zarif bir olay mekanizması sunar.
Yükleme
composer require webman/event
Olayı Abone Olma
Olaylara abone olma, config/event.php
dosyası aracılığıyla yapılandırılır:
<?php
return [
'user.register' => [
[app\event\User::class, 'register'],
// ...diğer olay işleme fonksiyonları...
],
'user.logout' => [
[app\event\User::class, 'logout'],
// ...diğer olay işleme fonksiyonları...
]
];
Açıklama:
user.register
,user.logout
vb. birinci dereceden olay isimleridir. String türündedir, küçük harflerle ve nokta (.) ile ayrılmış şekilde önerilir.- Bir olayın birden fazla olay işleme fonksiyonu olabilir. Çağrı sırası yapılandırmaya göredir.
Olay İşleme Fonksiyonları
Olay işleme fonksiyonları herhangi bir sınıf yöntemi, fonksiyon, kapanış fonksiyonu vb. olabilir.
Örneğin app/event/User.php
adında bir olay işleme sınıfı oluşturulabilir (dizin mevcut değilse kendiniz oluşturun):
<?php
namespace app\event;
class User
{
function register($user)
{
var_export($user);
}
function logout($user)
{
var_export($user);
}
}
Olayı Yayınlama
Event::emit($event_name, $data);
kullanarak olayı yayınlama, örneğin:
<?php
namespace app\controller;
use support\Request;
use Webman\Event\Event;
class User
{
public function register(Request $request)
{
$user = [
'name' => 'webman',
'age' => 2
];
Event::emit('user.register', $user);
}
}
İpucu
Event::emit($event_name, $data);
parametre olan$data
, dizi, sınıf örneği, dize vb. olabilir.
Jokar Olay Dinleme
Jokar abonelik dinleyicisi aynı dinleyiciye birden fazla olayı işlemek için izin verir, örneğin config/event.php
içinde yapılandırılmıştır:
<?php
return [
'user.*' => [
[app\event\User::class, 'deal']
],
];
Olay işleme fonksiyonu ikinci parametre olan $event_data
ile belirli olay adını alabilir:
<?php
namespace app\event;
class User
{
function deal($user, $event_name)
{
echo $event_name; // Özel olay adı, örneğin user.register user.logout vb.
var_export($user);
}
}
Olay Yayınını Durdurma
Olay işleme fonksiyonu içinde false
döndürdüğümüzde, olay yayını durur.
Kapanış İşleviyle Olay İşleme
Olay işleme fonksiyonları bir sınıf yöntemi olabilir, aynı zamanda kapanış fonksiyonu da olabilir, örneğin:
<?php
return [
'user.login' => [
function($user){
var_dump($user);
}
]
];
Olayları ve Dinleyicileri Görüntüleme
php webman event:list
komutunu kullanarak proje yapılandırmasında bulunan tüm olayları ve dinleyicileri görebilirsiniz.
Dikkat Edilmesi Gerekenler
Olay işleme asenkronik değildir; dolayısıyla yavaş işlemler için uygun değildir. Yavaş işlemler için webman/redis-queue gibi bir mesaj kuyruğu kullanılmalıdır.