danack / console
重构的 Symfony Console 组件
v2.6.2
2024-01-01 18:25 UTC
Requires
- php: >=5.3.3
Requires (Dev)
- danack/auryn: 0.14.1
- phpunit/phpunit: 4.2.6
- psr/log: ~1.0
- symfony/process: ~2.1
This package is auto-updated.
Last update: 2024-08-30 19:50:14 UTC
README
这并不是 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 中找到源代码和许可证。