dm-software/command-bus-validator

使用 Symfony Validator 验证命令的 Tactician CommandBus 中间件

v1.0.5 2023-03-03 10:20 UTC

This package is auto-updated.

Last update: 2024-08-30 01:54:57 UTC


README

Build Status Scrutinizer Code Quality Code Coverage

安装

composer require dmt-software/command-bus-validator

使用方法

默认使用方法

默认情况下,此中间件使用 Symfony Validator 组件的 StaticMethodLoader。如果您已安装了 doctrine/annotationsdoctrine/cache,则此默认行为通过 AnnotationLoader 扩展。

配置并将此中间件添加到 commandBus

<?php // src/CommandBus/builder.php
      
use DMT\CommandBus\Validator\ValidationMiddleware;
use League\Tactician\CommandBus;
use League\Tactician\Handler\CommandHandlerMiddleware;

/** @var CommandHandlerMiddleware $commandHandlerMiddleware */
$commandBus = new CommandBus(
  [
      new ValidationMiddleware(),
      $commandHandlerMiddleware 
  ]
);

CommandBus 添加后,当调用 handle 方法时,它接收到的命令将进行验证

<?php
 
use DMT\CommandBus\Validator\ValidationException;
use League\Tactician\CommandBus;
 
try {
    /** @var object $command */
    /** @var CommandBus $commandBus */
    $result = $commandBus->handle($command);
} catch (ValidationException $exception) {
    $violations = $exception->getViolations();
    foreach ($violations as $violation) {
        echo $violation->getMessage(); // outputs: the violation message(s)
    }
}

使用自定义配置的验证器

还可以通过将验证器提供给中间件构造函数来将其插入到中间件中。

此示例使用 FileLoader 确定命令的约束。

<?php // src/CommandBus/builder.php
 
use DMT\CommandBus\Validator\ValidationMiddleware;
use League\Tactician\CommandBus;
use League\Tactician\Handler\CommandHandlerMiddleware;
use Symfony\Component\Validator\ValidatorBuilder;
 
$validator = (new ValidatorBuilder())
    ->addYamlMapping('config/validation.yaml')
    ->getValidator();

/** @var CommandHandlerMiddleware $commandHandlerMiddleware */
$commandBus = new CommandBus(
    [
        new ValidationMiddleware($validator),
        $commandHandlerMiddleware 
    ]
);

进一步阅读