ibrahim Bu şekilde 1 event ve 2 listener oluşturmuşsunuz. Böyle ilerlemek istiyorsanız event içerisine işlemin başladığını mı yoksa bittiğini mi belirten bir özellik eklemeniz lazım. Mesela public $status olsun:
Event içinde:
class SycnDataEvent
{
const STARTED = 1;
const ENDED = 2;
public function __construct(
public int $status
)
{}
}
Command içinde:
public function handle()
{
event(new SycnDataEvent(SycnDataEvent::STARTED));
// İşlemler...
event(new SycnDataEvent(SycnDataEvent::ENDED));
}
Listener içinde:
public function(SycnDataEvent $event)
{
if($event->status == SycnDataEvent::STARTED) {
// Başladı...
}
}
Bu benim önerdiğim yol değil, bana göre bu ters. Mevcut yapınızda nasıl yapacağınızı göstermek için cevapladım. Bana göre yapmanız gereken 2 event ve 1 ya da 2 listener oluşturmak:
SyncDataStarted::class => [
DoSomethingAboutStartedDataProcess::class,
],
SyncDataEnded::class => [
DoSomethingAboutEndedDataProcess::class,
]
Bu şekilde yapınca command işinde önce SyncDataStarted, işlem bitince SyncDataEnded ateşleyeceksiniz. Artık 2 listener olduğu için zaten içeriye giren event sayesinde işlemin ne olduğunu biliyorsunuz.
Tek listener kullanmak isterseniz:
SyncDataStarted::class => [
DoSomethingAboutProcess::class,
],
SyncDataEnded::class => [
DoSomethingAboutProcess::class,
]
Bu şekilde yaptığınızda ise listener handle yönteminde şöyle yapabilirsiniz:
public function handle($event)
{
if($event instanceof SyncDataStarted) {
// İşlem başladı...
}
}