janmuran / laravel-command-bus
Laravel command bus with automatic build command object from json request
1.0.10
2025-04-17 20:21 UTC
Requires
- php: ^8.1
- ext-json: *
- illuminate/bus: ^9.0|^10.0|^11.0|^12.0
- illuminate/http: ^9.0|^10.0|^11.0|^12.0
- jms/serializer: ^3.22
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.53
- mockery/mockery: ^1.4
- orchestra/testbench: ~3.0|^8.0|^9.0
- phpmd/phpmd: ^2.15
- phpro/grumphp: ^2.5
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^11.1
- squizlabs/php_codesniffer: ^3.10
README
Simple command bus for laravel. Use jms serializer for build command.
Install
composer require janmuran/laravel-command-bus
Example
Create Command
Command is object that implement Janmuran\LaravelCommandBus\Model\Command interface.
<?php
declare(strict_types=1);
namespace Janmuran\LaravelCommandBus\Example\Command;
use Janmuran\LaravelCommandBus\Model\Command;
final class ChangePersonAge implements Command
{
public function __construct(
public readonly string $name,
public readonly int $age,
) {
}
}
Create Command Handler
<?php
declare(strict_types=1);
namespace Janmuran\LaravelCommandBus\Example\Handler;
use Janmuran\LaravelCommandBus\Example\Command\ChangePersonAge;
use Janmuran\LaravelCommandBus\Model\CommandHandler;
use Janmuran\LaravelCommandBus\Response\ResponseStorageInterface;
final class ChangePersonAgeHandler implements CommandHandler
{
public const NUMBER = 10;
public function __construct(
private ResponseStorageInterface $responseStorage,
) {
}
public function handle(ChangePersonAge $command): void
{
$newAge = $command->age + self::NUMBER;
$this->responseStorage->setResponse([
'newAge' => $newAge,
'commad' => $command,
]);
}
}
Register command
Add this lines to AppServiceProvider.php
$commandBus = resolve(CommandBus::class);
$commandBus->map([
CommandExample::class => CommandExampleHandler::class,
ChangePersonAge::class => ChangePersonAgeHandler::class,
]);
Usage
Endpoint for command request: /command/run
example json request:
{
"command": "ChangePersonAge",
"params": {
"name": "Test Name",
"age": 24
}
}
POST request is automaticaly build to command object and handled by Command handler.
Validation data
request can be validated in Command handler.
If you require all errors in response array use ValidationException
$validation = \Illuminate\Support\Facades\Validator::make(
$data,
[
'age' => 'require|min:20',
],
);
if ($validation->fails()) {
throw ValidationException::create($validation->errors()->toArray());
}