tjm/sy-console

Symfony Console 组件,具有依赖注入、配置处理、可配置命令加载和其他特性。

v2.0.1 2023-12-07 03:03 UTC

This package is auto-updated.

Last update: 2024-08-28 19:10:31 UTC


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 控制台甚至不起作用,您可能不会注意到。