php - Yii2 - 从另一个控制台命令中调用 Yii 控制台命令?

标签 php shell yii2

我创建了两个不同的 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/

相关文章:

linux - 如何在 Linux 中同时运行 find 和 cp 命令?

php - 触发由父 View 引起的任何事件时退出 Tour - Intro.js

php - 如何使用 PHP 和 MySQL 删除图像?

php - 调用两次的同一个 div 标签的 CSS 样式问题。表现不同

bash - 使用 shell 脚本将有符号整数转换为无符号整数

javascript - Yii2 将值设置为RadioList

yii - Yii2 中的 findAllByPk 模拟

php - 第 2 行的 fatal error : Call to undefined function mb_internal_encoding() in/home/blabla/blabla. php

php - 移动上传的文件在 Godaddy 上不起作用(但在本地主机上工作)

Java keytool - 非法选项 deststorepass :file