edupham / laravel-command-bus
Simple Command Bus for Laravel framework
1.0.0
2022-12-17 18:33 UTC
Requires
- php: ^7.1|^8.0
- illuminate/container: *
- illuminate/support: *
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: ^4.6
- sebastian/version: ^1.0.1
This package is auto-updated.
Last update: 2025-03-09 20:19:06 UTC
README
Simple Command Bus for Laravel framework
Based on rosamarsky/laravel-command-bus
Installation
composer require edupham/laravel-command-bus
If your Laravel version is less than 5.5, add the following line to the providers array in config/app.php
:
Edupham\CommandBus\CommandBusServiceProvider::class,
Usage
Folder Structure
apps/Http/Controllers/
/User
--/Commands
----/RegisterUser.php
--/Controllers
----/AbstractController.php
----/UserController.php
--/Handlers
----/RegisterUserHandler.php
Command
namespace App\Http\Controllers\User\Commands; class RegisterUser implements \Edupham\CommandBus\Command { private $email; private $password; public function __construct(string $email, string $password) { $this->email = $email; $this->password = $password; } public function email(): string { return $this->email; } public function password(): string { return $this->password; } }
Handler
namespace App\Http\Controllers\User\Handlers; class RegisterUserHandler implements \Edupham\CommandBus\Handler { private $userRepository; public function __construct(UserRepository $userRepository) { $this->userRepository = $userRepository; } public function handle(\Edupham\CommandBus\Command $command): User { $user = new User( $command->email(), $command->password() ); $this->userRepository->store($user); return $user; } }
Controllers
namespace App\Http\Controllers\User\Controllers; use Edupham\CommandBus\Command; use Edupham\CommandBus\CommandBus; class AbstractController extends \Illuminate\Routing\Controller { private $dispatcher; public function __construct(\Edupham\CommandBus\CommandBus $dispatcher) { $this->dispatcher = $dispatcher; } public function dispatch(\Edupham\CommandBus\Command $command) { return $this->dispatcher->execute($command); } }
namespace App\Http\Controllers\User\Controllers; use App\Http\Controllers\User\Commands\RegisterUser; use Illuminate\Http\Request; class UserController extends AbstractController { public function store(Request $request) { $user = $this->dispatch(new RegisterUser( $request->input('email'), $request->input('password') )); return $user; } }