danack/console

重构的 Symfony Console 组件

v2.6.2 2024-01-01 18:25 UTC

This package is auto-updated.

Last update: 2024-08-30 19:50:14 UTC


README

Build Status

这并不是 Symfony console - 它是对其进行分支重构以

  • 将 '路由' 和命令分发分离。
  • 移除事件,因为它们不应该出现在合理且简单的代码中。
  • 停止控制台应用程序在不知道如何处理异常时捕获和打印异常。

基本上,虽然 Symfony/console 库的大部分工作做得很好,但你必须让它运行应用程序是很愚蠢的。控制台库应该专注于控制台相关的事务,然后你应该能够自己运行应用程序。

下面的示例展示了如何使用可调用对象创建命令,让控制台应用程序 '路由' 输入,然后使用 Auryn 运行可调用对象。

$console = new Application();
$console->add(new AboutCommand());

// Create a command that will call the function 'uploadFile'
$uploadCommand = new Command('uploadFile', 'upload');
$uploadCommand->addArgument('name', InputArgument::REQUIRED, 'The name of the thing to foo');
$console->add($uploadCommand);

$helloWorldCallable = function ($name) {
    echo "Hello world, and particularly $name".PHP_EOL;
};

// Create a command that will call the closure
$callableCommand = new Command($helloWorldCallable, 'greet');
$callableCommand->addArgument('name', InputArgument::REQUIRED, 'The name of the person to say hello to.');
$console->add($callableCommand);

try {
    $parsedCommand = $console->parseCommandLine();
}
catch (\Exception $e) {
    $output = new BufferedOutput();
    $console->renderException($e, $output);
    echo $output->fetch();
    exit(-1);
}

$provider = new Auryn\Provider();
$provider->execute(
    $parsedCommand->getCallable(),
    lowrey($parsedCommand->getParams())
);


function uploadFile($filename) {
    echo "Need to upload the file $filename".PHP_EOL;
}

// Auryn needs scalars prefixed with a colon
function lowrey($params) {
    $newParams = [];
    foreach ($params as $key => $value) {
        $newParams[':'.$key] = $value;
    }
    return $newParams;
}

如果上面的示例在 example.php 文件中,运行命令 php example.php greet Danack 将输出

你好世界,尤其是 Danack

\o/

如果您想看到一个运行的示例,请运行 Tests/example.php 文件并传递一些适当的参数,例如:

  • php Tests/example.php upload backup.zip --dir=/var/log
  • php Tests/example.php greet Danack
  • php Tests/example.php greet

将正确路由 'upload' 和 'greet' 命令

从 Symfony/console 迁移

从 Symfony/console 迁移到 Danack/console 所需的主要工作是更改任何命令对象以返回一个可调用对象,而不是具有执行方法。

这包括仅显示信息而不是具有 '正确' 可执行文件的命令,例如 ListCommand

然后只需从

  • Application::run,它运行命令并返回一个状态码

更改为

  • Application::parseCommandLine,它仅解析命令行参数并返回一个 ParsedCommand 对象。

以前的 README

Console 简化了创建美观且可测试的命令行界面的过程。

测试

您可以使用以下命令运行单元测试

$ cd path/to/Symfony/Component/Console/
$ composer.phar install
$ phpunit

第三方

Resources/bin/hiddeninput.exe 是本组件中提供的第三方二进制文件。在 https://github.com/Seldaek/hidden-input 中找到源代码和许可证。

资源

控制台组件

如何创建控制台命令