tebazil / yii2-console-runner
Yii2控制台命令运行器,无需启用shell_exec()即可运行
Requires
- yiisoft/yii2: ^2.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-14 18:14:57 UTC
README
这是Yii2控制台命令运行器的另一种实现。在撰写本文时,它与vova07/yii2-console-runner-extension和[toriphes/yii2-console-runner] (https://github.com/toriphes/yii2-console-runner)不同,因为它不需要在服务器上启用shell_exec。
典型用法
通常,您会从Web应用的控制器操作中运行migrate
或其他控制台应用命令。
安装
通过composer安装此扩展是首选方法。
$ composer require tebazil/yii2-console-runner
运行
"tebazil/yii2-console-runner": "*"
或将其添加到您的composer.json
文件中的require
部分。
基本用法
首先,您初始化运行器。
$runner = new \tebazil\runner\ConsoleCommandRunner();
然后,运行所需的命令
$runner->run('migrate'); $runner->run('migrate\create', ['insert_test_id','interactive'=>false]);
运行每个命令后,您可以收集获取最后一个命令的exitCode和/或输出。
$output = $runner->getOutput(); $exitCode = $runner->getExitCode();
##工作原理在初始化时,运行器创建一个新的控制台应用,然后将其返回给当前正在执行的应用程序。在运行命令时,运行器将首先用“子”控制台应用替换Yii::$app
,运行命令,然后再将Yii::$app替换回父应用。结果是,在控制台命令中,您有控制台应用的Yii::$app
,而在运行之间,Yii::$app
是您的“父”应用,正如预期的那样。
##高级用法您可以选择将$config
(路径或数组)传递给ConsoleCommandRunner::__construct
方法,这样您就可以在运行时更改控制台应用的配置。您可能还想要创建具有不同配置的应用程序的几个运行器 - 每个运行器都将坚持自己的应用,并在运行之间恢复原始的Yii::$app
。
##已知问题目前只能通过getOutput
获取echo
输出,因为使用了标准的ob_start/ob_get_clean
组合来捕获输出。如果输出直接写入stdout
或stderr
,则不会被捕获。