laravel-mediator maintained by patrickquijano
Description
A mediator pattern implementation for Laravel
Author
Last update
2024/11/06 17:13
(dev-dependabot/composer/composer-77f992f351)
License
Downloads
397
Laravel Mediator
This package provides a simple implementation of the Mediator pattern and CQRS (Command Query Responsibility Segregation) for Laravel applications.
Features
- Decouples commands and queries from their handlers
- Promotes loose coupling and testability
- Improves code organization
Installation
composer require patrickquijano/laravel-mediator
Usage
- Create commands or queries or events:
<?php namespace App\Commands; use LaravelMediator\Abstracts\Buses\Command; class MyCommand extends Command { public function __construct(public string $data) { } }<?php namespace App\Queries; use LaravelMediator\Abstracts\Buses\Query; class GetUserDataQuery extends Query { public function __construct(public int $userId) { } } - Create handlers:
<?php namespace App\Handlers; use LaravelMediator\Abstracts\Buses\Handlers\CommandHandler; class MyCommandHandler extends CommandHandler { public function handle(MyCommand $command): void { // Handle the command } }<?php namespace App\Handlers; use LaravelMediator\Abstracts\Buses\Handlers\QueryHandler; class GetUserDataQueryHandler extends QueryHandler { public function handle(GetUserDataQuery $query): array { // Fetch user data and return it } } - Configure event listeners in
bootstrap/app.php:<?php use Illuminate\Foundation\Application; return Application::configure(basePath: dirname(__DIR__)) ->withEvents([ __DIR__.'/../app/Handlers', ]); - Dispatch commands or queries:
use LaravelMediator\Facades\CommandBus; CommandBus::dispatch(new MyCommand('data'));use LaravelMediator\Facades\QueryBus; $userData = QueryBus::dispatch(new GetUserDataQuery(123));
Contributing:
Feel free to contribute by opening issues or pull requests.