فهرست مستندات پروژه

رویدادها

Ersalv0.2.0-beta.2مشاهده منبعفارسی / انگلیسی

ارسال رویدادهای چرخه حیات را از طریق EventDispatcher اختیاری dispatch می‌کند. برای دریافت آن‌ها یک dispatcher به سازنده Ersal پاس دهید:

$ersal = new Ersal(
    eventDispatcher: new MyDispatcher(),
);

کاتالوگ رویدادها

همه رویدادها کلاس‌های data ساده با public readonly هستند.

رویدادفیلدهاچه زمانی dispatch می‌شود
ShipmentQuotedproviderName، request، quotesquote() موفق برگشت
ShipmentCreatedproviderName، shipmentcreateShipment() موفق شد
ShipmentTrackedproviderName، shipmenttrack() موفق برگشت
ShipmentCancelledproviderName، shipmentcancel() موفق شد
ShipmentFailedproviderName، 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 سازگار است.

جستجو در مستندات

در همه پروژه‌ها جستجو کنید. با بستن این پنجره به راهنما برمی‌گردید.

Tab برای جابه‌جایی · Enter برای باز کردنEsc برای بستن