zack / saga
Events and side effect handling with sagas for PHP.
Installs: 28
Dependents: 0
Suggesters: 0
Security: 0
Stars: 16
Watchers: 2
Forks: 1
Open Issues: 0
pkg:composer/zack/saga
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