zack/saga

此包已被废弃且不再维护。未建议替代包。

使用sagas处理PHP中的事件和副作用。

v0.1.0 2016-09-24 23:38 UTC

This package is not auto-updated.

Last update: 2023-10-28 14:25:21 UTC


README

Build Status Coverage Status

Zack/Saga 是一个简单易用的库,用于处理事件和副作用。它受到 redux-saga 的启发,使用PHP生成器和简单的效果对象来创建可维护且易于测试的过程和工作流程。

示例

<?php

use Symfony\Component\EventDispatcher\EventDispatcher;
use Zack\Saga\Processor;
use Zack\Saga\SagaInterface;

class LoginSaga implements SagaInterface
{
    public function run(): \Generator
    {
        // Wait for the 'acme.user.login' event.
        $event = yield take('acme.user.login');
        
        // Get user from given ID.
        $user = UserProvider::find($event->getUserId());
        
        if ($user === null) {
            // Redirect to login page.
            yield dispatch('acme.router.redirect', new RedirectEvent('/login'));
            return;
        }
        
        // Create session.
        yield dispatch('acme.user.session', new UserSessionEvent($user));
        // Redirect to dashboard page.
        yield dispatch('acme.router.redirect', new RedirectEvent('/login'));
        
        // Fork saga for taking user logout event.
        yield fork(new LogoutSaga());
    }
}

$eventDispatcher = new EventDispatcher();

// Create a default Processor.
$processor = Processor::create($eventDispatcher);
$processor->run(new LoginSaga());

$eventDispatcher->dispatch('acme.user.login', new LoginEvent(1));

安装

您可以通过 Composer 安装此库

$ composer require zack/saga