zack / saga
This package is abandoned and no longer maintained.
No replacement package was suggested.
Events and side effect handling with sagas for 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
is a simple and easy to use library for event and side effects handling.
Inspired by redux-saga
it uses PHP generators and simple effect objects to create maintainable and easy to test processes and workflows.
Example
<?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));
Installation
You can install this library via Composer:
$ composer require zack/saga