tebazil/yii2-console-runner

该软件包最新版本(0.0.0)没有可用的许可信息。

Yii2控制台命令运行器,无需启用shell_exec()即可运行

0.0.0 2015-10-16 21:58 UTC

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组合来捕获输出。如果输出直接写入stdoutstderr,则不会被捕获。