zack / saga
此包已被废弃且不再维护。未建议替代包。
使用sagas处理PHP中的事件和副作用。
v0.1.0
2016-09-24 23:38 UTC
Requires
- php: >=7.0.10
- symfony/event-dispatcher: ^2.7|^3.1
Requires (Dev)
- phpunit/phpunit: ^5.5
This package is not auto-updated.
Last update: 2023-10-28 14:25:21 UTC
README
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