danilovl / symfony-console-input-validation
为 Symfony 控制台命令提供添加输入验证的简单方法。
v0.1.2
2024-08-16 18:17 UTC
Requires
- php: ^8.3.0
- symfony/console: ^7.0
- symfony/framework-bundle: ^7.0
Requires (Dev)
- phpunit/phpunit: ^10.2
README
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()
添加 InputOption
和 InputArgument
。
当你调用 $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 许可证。