antidot-fw / tactician
Tactician 命令总线适配器,适用于 Antidot 框架。
0.0.3
2021-01-10 15:49 UTC
Requires
- php: ^7.4|^8.0
- league/tactician: ^1.0
- league/tactician-container: ^2.0
- psr/container: ^1.0.0
Requires (Dev)
- infection/infection: ^0.20
- phpro/grumphp: ^1.0
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.4
- symfony/var-dumper: ^5.1
- vimeo/psalm: ^4.0
README
入门
安装
composer require antidot-fw/tactician
配置
在配置自动加载目录内创建 command-bus.global.php
文件。
<?php // command-bus.global.php return [ 'dependencies' => [ 'invokables' => [ \App\Handler\PingHandler::class => \App\Handler\PingHandler::class, ] ], 'command-bus' => [ 'handler-map' => [ \App\Command\PingCommand::class => \App\Handler\PingHandler::class ], ], ];
示例命令和处理程序。
<?php namespace App\Command; class PingCommand { }
<?php namespace App\Handler; use App\Command\PingCommand; class PingHandler { public function __invoke(PingCommand $command) { return time(); } }
您可以将 InFw\TacticianAdapter\Action\AbstractAction
作为基础动作使用。
<?php namespace App\Action; use App\Command\PingCommand; use Laminas\Diactoros\Response\JsonResponse; use Psr\Http\Message\ResponseInterface; use Psr\Http\Server\RequestHandlerInterface; use Psr\Http\Message\ServerRequestInterface; class PingAction implements RequestHandlerInterface { public function handle(ServerRequestInterface $request): ResponseInterface { return new JsonResponse(['ack' => $this->bus->handle(new PingCommand())]); } }
修改命令总线
您可以根据项目需求修改整个命令总线。
这是默认配置。
<?php // command-bus.global.php return [ ..., 'command_bus' => [ 'locator' => \League\Tactician\Handler\Locator\HandlerLocator::class, 'inflector' => \League\Tactician\Handler\MethodNameInflector\MethodNameInflector::class, 'extractor' => \League\Tactician\Handler\CommandNameExtractor\CommandNameExtractor::class, 'middleware' => [ \League\Tactician\Plugins\LockingMiddleware::class, \League\Tactician\Logger\LoggerMiddleware::class, \League\Tactician\CommandEvents\EventMiddleware::class, ], ], ];
查询总线
您也可以使用查询总线,与命令总线不同的是,查询总线将始终返回一个对象。
<?php // command-bus.global.php return [ ..., 'query_bus' => [ 'locator' => 'query_bus.handler_locator', 'inflector' => \League\Tactician\Handler\MethodNameInflector\MethodNameInflector::class, 'extractor' => \League\Tactician\Handler\CommandNameExtractor\CommandNameExtractor::class, 'middleware' => [ ], ], ];