lezhnev74/prooph-direct-router

v1.0.3 2017-04-15 09:54 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:32 UTC


README

Latest Stable Version Build Status License Total Downloads

将命令路由到其处理程序

命令会被路由到具有相同名称并在同一命名空间下添加“Handler”的处理器

namespace Some\Space;

// your command
class Command {}

// your command handler 
class CommandHandler {
    function __invoke(Command $cmd) {...} 
}

优势

通过使用约定(隐式路由),您可以轻松地添加命令或查询而无需不断更新配置文件。只需将这两个文件放在同一文件夹中并遵循命名约定即可。

  • 处理器类必须与命令名称完全一致,并在末尾添加 Handler
  • 命令和处理器必须位于同一命名空间下

一个方便的工具 :)

安装

composer require lezhnev74/prooph-direct-router

配置

如果您在项目中使用配置文件,请访问您的 prooph.php 配置文件并更新“service_bus.command_bus.router.type”字段。如果您手动设置了消息总线,请向下滚动到“用法”部分。

//...
'service_bus' => [
    'command_bus' => [
        'router' => [
            'routes' => [
                // list of commands with corresponding command handler
            ],
            'type' => \DirectRouter\DirectRouter::class
        ],
    ],
//…

用法

此包使用依赖容器定位给定命令的处理程序,因此您需要安装某些容器包(支持 ContainerInterface

//
// Manual message bus setup
// 1. Prepare router
$router = new DirectRouter();
$router->attachToMessageBus($commandBus);
// 2. Add service locator (to instantiate the handler). $container is your implementation of PSR-11 ContainerInterface
$locator = new ServiceLocatorPlugin($container);
$locator->attachToMessageBus($bus);

//
// Dispatch command
//
$command = new \Some\Space\Command(...);
$commandBus->dispatch($command);