fidry / console
用于创建 CLI 应用程序的库
0.6.10
2024-04-23 08:36 UTC
Requires
- php: ^8.2
- psr/log: ^3.0
- symfony/console: ^6.4 || ^7.0
- symfony/deprecation-contracts: ^3.4
- symfony/event-dispatcher-contracts: ^2.5 || ^3.0
- symfony/service-contracts: ^2.5 || ^3.0
- thecodingmachine/safe: ^2.0
- webmozart/assert: ^1.11
Requires (Dev)
- bamarni/composer-bin-plugin: ^1.8.2
- composer/semver: ^3.3.2
- ergebnis/composer-normalize: ^2.33
- fidry/makefile: ^0.2.1 || ^1.0.0
- infection/infection: ^0.28
- phpunit/phpunit: ^10.2
- symfony/dependency-injection: ^6.4
- symfony/flex: ^2.4.0
- symfony/framework-bundle: ^6.4
- symfony/http-kernel: ^6.4
- symfony/yaml: ^6.4 || ^7.0
Conflicts
- symfony/dependency-injection: <6.4.0
- symfony/framework-bundle: <6.4.0
- symfony/http-kernel: <6.4.0
- dev-main / 1.0.x-dev
- 0.6.10
- 0.6.9
- 0.6.8
- 0.6.7
- 0.6.6
- 0.6.5
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6.0
- 0.5.5
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.0
- 0.3.0
- 0.2.0
- 0.1.0
- dev-dependabot/composer/dependencies-49a1f01d90
- dev-theofidry-patch-1
- dev-extend-command-notes
- dev-feat/command-tester
- dev-draft
- dev-refactor/register-commands
This package is auto-updated.
Last update: 2024-09-15 14:07:08 UTC
README
动机:此库的目的是为 console 命令和/或应用程序提供更轻量级且更健壮的 API,用于 symfony/console。
它可以与 FrameworkBundle
结合使用以简化命令的创建,或者作为独立的包来创建 CLI 应用程序。
主要区别
- 使用
IO
对象而不是 Input + Output + SymfonyStyle,它提供了- SymfonyStyle 的 API,但仍可访问 Input 和 Output 对象
- 用于参数和选项的类型化 API(在强制转换为更严格的类型时验证输入)
- 实现显式接口而不是扩展神级类
目录
使用 Symfony 安装
$ composer require theofidry/console
Symfony Flex 插件应添加以下内容
<?php declare(strict_types=1); // config/bundles.php return [ // ... // Symfony\Bundle\FrameworkBundle\Symfony\Bundle\FrameworkBundle() // ... Fidry\Console\FidryConsoleBundle::class => ['all' => true], ];
使用预览
要实现命令,必须实现 Fidry\Console\Command\Command
接口,如下所示
<?php declare(strict_types=1); namespace Acme; use Acme\MyService; use Fidry\Console\{ Command\Command, Command\Configuration, ExitCode, IO }; use Symfony\Component\Console\Input\InputArgument; final class CommandWithService implements Command { private MyService $service; public function __construct(MyService $service) { $this->service = $service; } public function getConfiguration(): Configuration { return new Configuration( 'app:foo', 'Calls MyService', <<<'EOT' The <info>%command.name</info> command calls MyService EOT, [ new InputArgument( 'username', InputArgument::REQUIRED, 'Name of the user', ), new InputArgument( 'age', InputArgument::OPTIONAL, 'Age of the user', ), ], ); } public function execute(IO $io): int { $this->service->call( $io->getTypedArgument('username')->asStringNonEmptyList(), $io->getTypedArgument('age')->asNullablePositiveInteger(), ); return ExitCode::SUCCESS; } }
启用包后,这些服务将自动配置为传统的 Symfony 命令。
已知限制
一些限制是由于没有足够的时间来处理这些或基于它们不是必要的假设。这些选择可能会根据所呈现的使用情况进行重新评估。
- 支持隐藏命令(见文档)
- 支持命令别名
- 支持命令使用配置
- 一些
Application
的神秘方法
灵感
- zenstruck/console-extra
- zenstruck/console-test
- webignition/symfony-console-typed-input
- webmozart-console
贡献
该项目提供了一个 Makefile
,其中注册了最常见的命令,例如修复代码风格或运行测试。
# Print the list of available commands make # or make help