digitalrevolution/symfony-console-validation

Symfony 命令输入参数和选项验证

v1.1.0 2023-12-08 15:12 UTC

This package is auto-updated.

Last update: 2024-08-31 00:35:54 UTC


README

Minimum PHP Version Minimum Symfony Version Run checks

Symfony Console Validation

Symfony Console 输入验证组件。简化输入参数和选项的验证。

安装

通过以下方式将库作为依赖项包含到您的项目中:

composer require digitalrevolution/symfony-console-validation

使用方法

  1. 创建一个扩展 AbstractValidatedInput 类的 ExampleInput 类。
  2. 配置您自己的 ValidationRules。有关规则的信息,请参阅验证简写库
  3. 确保将 InputValidator 类注册为 您的 Symfony 项目中的服务
use DigitalRevolution\SymfonyConsoleValidation\AbstractValidatedInput;
use DigitalRevolution\SymfonyConsoleValidation\ValidationRules;

class ExampleInput extends AbstractValidatedInput
{
    public static function getValidationRules(): ValidationRules
    {
        return new ValidationRules([
            'arguments' => [
                'email'   => 'required|string|email'                
            ],
            'options' => [
                'projectId' => 'int:min:1'
]           
        ]);
    }

    public function getEmail(): string
    {
        return $this->input->getArgument('email');
    }
    
    public function getProjectId(): ?int
    {
        $value = $this->input->getOption('projectId');
    
        return $value === null ? null : (int)$value;
    }
}

剩下的就是在您的 Command 中使用您的 ExampleInput 类来验证输入。

class ExampleCommand extends Command
{
    public function __construct(private InputValidator $inputValidator, ?string $name = null)
    {
        parent::__construct($name);
    }
    
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        // third argument will throw exception if input is invalid. Set to `false` if you want to handle the validation yourself.
        $validatedInput = $this->inputValidator->validate($input, ExampleInput::class, true);
        
        ...
    }    
}

手动处理无效输入

默认情况下,validate 方法将抛出 ViolationException。要自己处理违规情况

class ExampleCommand extends Command
{
    ...
    
    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $validatedInput = $this->inputValidator->validate($input, ExampleInput::class, false);
        if ($validatedInput->isValid() === false) {
            $violations = $validatedInput->getViolations();
            ...
        }
        ...
    }   
}

关于我们

在123inkt(Digital Revolution B.V.的一部分),每天都有超过50名开发专业人员致力于改进我们的内部ERP和我们的几家商店。你想加入我们吗?我们在寻找开发者