itmedia/command-bus-bundle
Composer 安装命令:
composer require itmedia/command-bus-bundle
包简介
Command bus
README 文档
README
Install
composer require itmedia/command-bus-bundle
CommandBus
Пример регистрации сервиса, также смотри ниже добавление встроеных обработчиков комманд (Middleware):
services: app.command_bus: class: Itmedia\CommandBusBundle\CommandBus\CommandBus arguments: ["@itmedia_command_bus.container_handler_mapper"]
Middleware
Middleware реализуют дополнительную обработку сообщений, например: валидацию, проверку прав доступа, логирование.
Middleware должны реализовывать интерфейс MiddlewareInterface. В CommandBus при выполнении сообщения
происходит его обработка подключенными Middleware. При не выполнении правил, должно всегда выбрасываться исключение.
Пример конфигурации:
services: app.command_bus: class: Itmedia\CommandBusBundle\CommandBus\CommandBus arguments: ["@itmedia_command_bus.container_handler_mapper"] calls: - [addMiddleware, ["@itmedia_command_bus.middleware_validation"]] - [addMiddleware, ["@app.middleware_access_control"]] # custom middleware app.middleware_access_control: class: AppBundle\Middleware\AccessControlMiddleware
Command
Команда должна иметь интерфейс Command.
use Itmedia\CommandBusBundle\Command\Command; class TestCommand implements Command { //... public function commandName(): string { return 'test_command'; } }
Handlers могут иметь произвольную структуру, если используется, либо для единичного handler - CommandHandler
Пример конфигурации CommandHandler:
services: # по умолчанию будет вызван метод execute() AppBundle\Handler\MyHandler: public: true tags: - {name: command_handler, command: core_register_user } # явное указание методов AppBundle\Handler\NyHandler2: public: true tags: - {name: command_handler, command: core_register_user1, method: methodName1 } - {name: command_handler, command: core_register_user2, method: methodName2 } - {name: command_handler, command: core_register_user3, method: methodName3 }
Пример использования:
$command = new CommandTest(); $this->get('app.command_bus')->handle($command);
Валидация команд
Для валидации команд средствами symfony/validator необходимо подключить ValidationMiddleware для CommandBus:
services: Itmedia\CommandBusBundle\CommandBus\CommandBus: arguments: ["@itmedia_command_bus.container_handler_mapper"] calls: - [addMiddleware, ["@itmedia_command_bus.middleware_validation"]]
Пример правил валидации команды:
use Itmedia\CommandBusBundle\Command\Command; use Symfony\Component\Validator\Constraints as Assert; class TestCommand implements Command { /** * @NotBlank() */ private string $username; /** * @NotBlank() * @Assert\Email() */ private string $email; public function __construct(string $username, string $email) { $this->username = $username; $this->email = $email; } public function commandName(): string { return 'test_command'; } public function getUsername(): string { return $this->username; } public function getEmail(): string { return $this->email; } }
Если комманда не проходит валидацию выбрасывается исключение ValidationException
Установка значений свойств комманды из массива
HandlePropertiesFormArrayTrait - вспомогательный трейт для устаовки значений по ключу из массива
в свойства команды. Название ключа должно соответсвовать названию свойства.
use Itmedia\CommandBusBundle\Command\Command; use Itmedia\CommandBusBundle\Command\HandlePropertiesFormArrayTrait; class TestCommand implements Command { use HandlePropertiesFormArrayTrait; // .... public function __construct($id, array $data) { $this->handleProperties($data); $this->id = $id; } }
itmedia/command-bus-bundle 适用场景与选型建议
itmedia/command-bus-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.59k 次下载、GitHub Stars 达 3, 最近一次更新时间为 2016 年 10 月 10 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 itmedia/command-bus-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 itmedia/command-bus-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 2.59k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 5
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-10-10