dm-software / command-bus-validator
使用 Symfony Validator 验证命令的 Tactician CommandBus 中间件
v1.0.5
2023-03-03 10:20 UTC
Requires
- php: >=7.2
- league/tactician: ^1.0
- symfony/validator: ^5.1
Requires (Dev)
- doctrine/annotations: ^1.6
- phpunit/phpunit: >=7.2
Suggests
- doctrine/annotations: Enables adding constraints using annotations
- doctrine/cache: Enables adding constraints using annotations
README
安装
composer require dmt-software/command-bus-validator
使用方法
默认使用方法
默认情况下,此中间件使用 Symfony Validator 组件的 StaticMethodLoader。如果您已安装了 doctrine/annotations 和 doctrine/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 ] );