danilovl/symfony-console-input-validation

为 Symfony 控制台命令提供添加输入验证的简单方法。

v0.1.2 2024-08-16 18:17 UTC

This package is auto-updated.

Last update: 2024-09-16 18:28:19 UTC


README

phpunit downloads latest Stable Version license

Symfony 控制台输入验证

关于

为 Symfony 控制台命令提供添加输入验证的简单方法。

要求

  • PHP 8.3 或更高版本
  • Symfony 7.0 或更高版本

1. 安装

使用 Composer 安装 danilovl/symfony-console-input-validation

composer require danilovl/symfony-console-input-validation

2. 配置

修改 bin/console 中的 symfony Application

return function (array $context): Application {
    $kernel = new Kernel($context['APP_ENV'], (bool) $context['APP_DEBUG']);

    return new \Danilovl\SymfonyConsoleInputValidation\Console\Application($kernel);
};

2. 使用

在配置函数中使用 $this->getDefinition() 添加 InputOptionInputArgument

当你调用 $input->getOption$input->getArgument 时,将调用验证回调。

<?php declare(strict_types=1);

namespace App\Application\Command;

use Danilovl\SymfonyConsoleInputValidation\Console\Input\InputOption as InputOptionValidation;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Exception\InvalidOptionException;
use Symfony\Component\Console\Input\{
    InputOption,
    InputInterface
};
use Symfony\Component\Console\Output\OutputInterface;

#[AsCommand(name: 'app:command-test')]
class TestCommand extends Command
{
    protected function configure(): void
    {
        $validation = static function (mixed $value): void {
            if (empty($value)) {
                return;
            }

            if (!in_array($value, ['encrypt', 'decrypt'])) {
                throw new InvalidOptionException(sprintf('"%s" is not a valid type.', $value));
            }
        };

        $inputOption = new InputOptionValidation(
            name: 'type',
            mode: InputOption::VALUE_REQUIRED,
            description: 'Encryption type.',
            suggestedValues: ['encrypt', 'decrypt'],
            validation: $validation
        );

        $this->getDefinition()->addOption($inputOption);
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $input->getOption('type');

        return Command::SUCCESS;
    }
}

许可证

symfony-console-input-validation 包是开源软件,采用 MIT 许可证