patrickquijano / laravel-mediator
A mediator pattern implementation for Laravel
v1.2.0
2024-09-04 03:19 UTC
Requires
- php: ^8.3
- illuminate/support: ^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.58
- laravel/pint: ^1.16
- nunomaduro/collision: ^8.1
- orchestra/testbench: ^9.0
README
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.