我创建了两个不同的 Yii2 控制台命令/ Controller 。
调用它们的例子是
# yii user/create-account
和
# yii webserver/update-config
运行 user/create-account 后,我想调用 webserver/update-config - 是否可以通过代码从 Yii 中执行此操作?或者我是否必须使用 exec()/system() 从外部调用第二个 yii php 脚本(我不想这样做)。
任何帮助/见解将不胜感激!
最佳答案
经过一番考虑,我选择从另一个 Controller 中调用一个 Controller 的方式是使用 Controller 的 runAction 方法(这也是 Yii 开发人员推荐的方式)。
控制台应用程序示例:
\Yii::$app->runAction('webserver/update-config');
也可以通过使用数组作为第二个参数来传递参数。
一个简单参数的例子:
\Yii::$app->runAction('webserver/update-config', ['oneValue', 'anotherValue'];
这里是命名参数的例子:
\Yii::$app->runAction('webserver/update-config', [
'servertype' => 'oneSetting',
'serverdir' => 'anotherSettingValue'
]);
请注意,这使得被调用的 Controller 成为调用代码的一部分。因此,如果被调用的 Controller 由于某种原因失败,整个程序就会失败。 良好的错误处理是必须的。在被调用的 Controller 中,您可以使用 return 设置错误代码以返回。
例子:
调用代码行:
$iExitCode = \Yii::$app->runAction('webserver/update-config', ['oneValue', 'anotherValue'];
调用 Controller :
<?php
namespace app\commands;
use yii\console\Controller;
/**
* Webserver related functions
*/
class WebserverController extends Controller {
public function actionUpdateConfig($oneValue, $anotherValue) {
// Code that does something
if ($success) return 0;
else return 1;
}
}
?>
关于php - Yii2 - 从另一个控制台命令中调用 Yii 控制台命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420124/