amine-lejmi/messenger-maker

分离并增强 symfony messenger 查询、事件和命令消息的创建。

安装: 132

依赖: 0

建议者: 0

安全: 0

星星: 2

观察者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

v1.0.1 2024-07-19 09:27 UTC

This package is auto-updated.

Last update: 2024-09-19 09:47:57 UTC


README

MessengerMaker 是一个简化消息创建和注册的 Symfony 扩展包,明确区分查询、命令和事件。

主要功能

  • 自动消息创建:轻松创建和分离查询、事件和命令。
  • 输入和获取器生成:自动为消息生成输入和获取方法。
  • 总线注册:无缝在指定的消息传输中注册消息。

此扩展包在 Symfony/Messenger 的基础上增加了一层,利用其配置。更多详细信息,请参阅 Symfony Messenger 组件文档

安装

请确保已全局安装 Composer,如 Composer 文档中的 安装章节 所述。

使用 Symfony Flex 的应用程序

打开命令行控制台,进入您的项目目录并执行

composer require amine-lejmi/messenger-maker

不使用 Symfony Flex 的应用程序

步骤 1:下载扩展包

打开命令行控制台,进入您的项目目录并执行以下命令以下载此扩展包的最新稳定版本

composer require amine-lejmi/messenger-maker

步骤 2:启用扩展包

然后,通过将其添加到项目 config/bundles.php 文件中注册的扩展包列表中来启用扩展包

// config/bundles.php

return [
    // ...
    AmineLejmi\MessengerMaker\MessengerMakerBundle::class => ['all' => true],
];

安装后

要使用提供的接口以自动将消息注册到相应的总线中,请将以下行添加到您的 config/services.yaml 配置文件中

services:
  # ...
  _instanceof:
    AmineLejmi\MessengerMaker\Contract\CommandHandlerInterface:
      tags:
        - { name: messenger.message_handler, bus: command.bus }
    AmineLejmi\MessengerMaker\Contract\EventHandlerInterface:
      tags:
        - { name: messenger.message_handler, bus: event.bus }
    AmineLejmi\MessengerMaker\Contract\QueryHandlerInterface:
      tags:
        - { name: messenger.message_handler, bus: query.bus }

注意:您只能添加项目中需要的接口。

使用方法

此扩展包提供用于创建命令、查询和事件的三个不同的控制台命令

1- 创建新的命令

php bin/console make:messenger:command <command-name>

注意: <command-name> 必须以 "Command" 结尾。

2- 创建新的查询

php bin/console make:messenger:query <query-name>

注意: <query-name> 必须以 "Query" 结尾。

3- 创建新的事件

php bin/console make:messenger:event <event-name>

注意: <event-name> 必须以 "Event" 结尾。

工作原理

执行命令

对于这些命令中的每一个,控制台都会提示您

  1. 选择在 config/messenger.yaml 中配置的相应传输
$ php bin/console make:messenger:command SendEmailCommand

 Register this command as : [none]:
  [0] none
  [1] low-priority
  [2] high-priority
 > 

注意:选择传输后,扩展包将自动在 config/packages/messenger.yaml 中的路由部分注册消息

framework:
  # ...
  messenger:
    # ...
    routing:
        # ...
        App\Messenger\Command\SendEmailCommand: low-priority
        # ...
  1. 添加特定消息所需的任何其他输入
New property name (press <return> to stop adding fields):
> 

Field type (enter ? to see all types) [string]:
> 

Can this field be null (nullable) (yes/no) [no]:
> 

按照提示完成命令、查询或事件的创建。

文件创建

根据您执行的命令,将创建包含相应文件的相应文件夹

📦project_dir
 ┣ 📂...
 ┣ 📂 src
 ┃ ┗ 📂 Messenger
 ┃    ┗ 📂 Command
 ┃    ┗ 📂 CommandHandler
 ┃    ┗ 📂 Event
 ┃    ┗ 📂 EventHandler
 ┃    ┗ 📂 Query
 ┃    ┗ 📂 QueryHandler

注意:处理器实现接口,以便可以将它们分发到相应的总线

  • query.bus
  • event.bus
  • command.bus

示例

<?php

namespace App\Messenger\Command;

class SendEmailCommand
{
    private string $address;
    private ?string $message;

    public function __construct(string $address, ?string $message)
    {
        $this->address = $address;
        $this->message = $message;
    }

    public function getAddress(): string
    {
        return $this->address;
    }

    public function getMessage(): ?string
    {
        return $this->message;
    }
}
<?php

namespace App\Messenger\CommandHandler;

use AmineLejmi\MessengerMaker\Contract\CommandHandlerInterface;
use App\Messenger\Command\SendEmailCommand;

class SendEmailCommandHandler implements CommandHandlerInterface
{
    public function __construct()
    {
    }

    public function __invoke(SendEmailCommand $command)
    {
        $address = $command->getAddress();
        $message = $command->getMessage();
        
        // Do something with your variables 
    }
}