tjm / sy-console
Symfony Console 组件,具有依赖注入、配置处理、可配置命令加载和其他特性。
v2.0.1
2023-12-07 03:03 UTC
Requires
- php: >=5.3.3
- symfony/config: >=4.4 <7.0
- symfony/console: >=4.4 <7.0
- symfony/dependency-injection: >=4.4 <7.0
- symfony/event-dispatcher: >=4.4 <7.0
- symfony/finder: >=4.4 <7.0
- tjm/sy-dependency-injection: ^1.0
Requires (Dev)
- symfony/yaml: >=4.4 <7.0
- tjm/dev: ^1
README
Symfony Console 组件,包括依赖注入、配置处理、易于配置的命令加载、以 STDIN 作为第一个参数、改进默认命令行为和其他特性。
用法
像现在的大多数 Symfony 项目一样,您从 composer 开始,将 tjm/sy-console
作为依赖项。您将创建一个类似于 仅使用 symfony 组件时 的应用程序,但使用 sy-console 的 Application
类,并将配置作为参数传递。
#!/usr/bin/env php <?php require __DIR__ . /'vendor/autoload.php'; use TJM\Component\Console\Application; (new Application(__DIR__ . '/config.yml'))->run();
在配置文件中,您可以设置参数、执行导入并配置服务,就像使用 Symfony 标准应用程序一样(尽管没有一些特性,如包路径别名)。有一个 'tjm_console' 键用于配置应用程序本身。这是您设置名称、版本和命令的地方。
parameters:
foo: bar
paths.settings:
foo: '/foo/bar'
bar: '/bar/foo'
services:
paths:
class: 'Foo\Component\Service\Paths'
arguments: ['@service_container', %paths.settings%]
test:
class: 'Foo\Component\Service\Test'
App\Command\:
autowire: true
resource: '%paths.project%/src/Command'
tags: ['console.command']
tjm_console:
name: Test
version: '1.0'
rootNamespace: foo ## will alias all 'foo:' commands to the same names without the 'foo:'. This is primarily to make commands easy to access but allow the same commands to be separated by namespace in another app
commands:
'Foo\Component\Command': '/Foo/src/Command' ## loads all commands in 'Foo\Component\Command' namespace from '/Foo/src/Command' folder
- 'Foo\Component\Other\Other2\Command' ## loads single command class 'Foo\Component\Other\Other2\Command' via autoloading
命令键是一个关联数组,键是命名空间,值是文件夹或文件路径。如果键是数字,则值将是命令的命名空间类名,它将使用自动加载器加载类。
在 Symfony 3+ 中,您还可以使用 console.command
标签将类作为服务加载,如上述 services
定义中所示。
已知问题
当将命令作为管道输入时,例如 echo 'foo' | bin/console something
,Symfony 问题辅助程序将表现得好像交互被设置为 false,因此将跳过询问用户输入,只使用默认值。这似乎是 STDIN 和 PHP 的一般问题。我正在寻找解决方案,但尚未找到。由于将命令作为管道输入到标准 Symfony 控制台甚至不起作用,您可能不会注意到。