فهرست مستندات پروژه
رویدادها
ارسال رویدادهای چرخه حیات را از طریق EventDispatcher اختیاری dispatch میکند. برای دریافت آنها یک dispatcher به سازنده Ersal پاس دهید:
$ersal = new Ersal(
eventDispatcher: new MyDispatcher(),
);
کاتالوگ رویدادها
همه رویدادها کلاسهای data ساده با public readonly هستند.
| رویداد | فیلدها | چه زمانی dispatch میشود |
|---|---|---|
ShipmentQuoted | providerName، request، quotes | quote() موفق برگشت |
ShipmentCreated | providerName، shipment | createShipment() موفق شد |
ShipmentTracked | providerName، shipment | track() موفق برگشت |
ShipmentCancelled | providerName، shipment | cancel() موفق شد |
ShipmentFailed | providerName، operation، reason، errorCode | هر عملیاتی شکست خورد |
operation در ShipmentFailed یکی از: 'quote'، 'book'، 'track'، 'cancel'، 'label'، 'pickup'.
Dispatcher حداقلی
use Eram\Ersal\Http\EventDispatcher;
use Eram\Ersal\Event\ShipmentCreated;
use Eram\Ersal\Event\ShipmentFailed;
final class AppDispatcher implements EventDispatcher
{
public function dispatch(object $event): object
{
match (true) {
$event instanceof ShipmentCreated => $this->onCreated($event),
$event instanceof ShipmentFailed => $this->onFailed($event),
default => null,
};
return $event;
}
private function onCreated(ShipmentCreated $e): void
{
$this->logger->info('مرسوله ثبت شد', [
'provider' => $e->providerName,
'shipment_id' => $e->shipment->getId()->value(),
'tracking_code' => $e->shipment->getTrackingCode(),
]);
}
private function onFailed(ShipmentFailed $e): void
{
$this->logger->error('عملیات مرسوله شکست خورد', [
'provider' => $e->providerName,
'operation' => $e->operation,
'reason' => $e->reason,
'code' => $e->errorCode,
]);
}
}
استفاده از Dispatcher استاندارد PSR-14
امضای EventDispatcher::dispatch() عمداً مشابه PSR-14 است (object → object). برای استفاده از dispatcher PSR-14 موجود، یک آداپتر نازک بنویسید:
final class Psr14Adapter implements EventDispatcher
{
public function __construct(private \Psr\EventDispatcher\EventDispatcherInterface $inner) {}
public function dispatch(object $event): object
{
return $this->inner->dispatch($event);
}
}
ارسال به PSR-14 متکی نیست — بدون وابستگی مستقیم psr/event-dispatcher، ولی قرارداد به صورت drop-in سازگار است.
⁅ارسال رویداد چرخه حیات را از طریق eventdispatcher اختیاری dispatch کرد برای دریافت آن آنها ان یک dispatcher به سازنده ersal پاس داد ersal new ersal eventdispatcher new mydispatcher همه رویداد کلاس data ساد با public readonly هستند رویداد فیلد چه زمانی dispatch شد shipmentquoted providername request quotes quote موفق برگشت shipmentcreated providername shipment createshipment موفق شد shipmenttracked providername shipment track موفق برگشت shipmentcancelled providername shipment cancel موفق شد shipmentfailed providername operation reason errorcode هر عملیاتی شکست خورد operation در shipmentfailed یکی از quote book track cancel label pickup use eram ersal http eventdispatcher use eram ersal event shipmentcreated use eram ersal event shipmentfailed final class appdispatcher implements eventdispatcher public function dispatch object event object match true event instanceof shipmentcreated this oncreated event event instanceof shipmentfailed this onfailed event default null return event private function oncreated shipmentcreated e void this logger info مرسوله ثبت شد provider e providername shipment id e shipment getid value tracking code e shipment gettrackingcode private function onfailed shipmentfailed e void this logger error عملیات مرسوله شکست خورد provider e providername operation e operation reason e reason code e errorcode امض eventdispatcher dispatch عمدا مشابه psr 14 است object object برای استفاد از dispatcher psr 14 موجود یک آداپ اداپ نازک نوشت final class psr14adapter implements eventdispatcher public function construct private psr eventdispatcher eventdispatcherinterface inner public function dispatch object event object return this inner dispatch event ارسال به psr 14 متکی نیست بدون وابستگی مستقی psr event dispatcher ولی قرارداد به صورت drop in سازگار است⁆
⁅رویداد⁆
⁅کاتالوگ رویدادهاdispatcher حداقلیاستفاد از dispatcher استاندارد psr 14⁆