经过一些考虑之后,我选择从另一个控制器中调用一个控制器的方式是使用控制器的runAction方法(这也是Yii开发人员推荐的方法).
控制台应用程序示例:
\Yii::$app->runAction('webserver/update-config');
也可以通过使用数组作为第二参数来移交params.
简单参数的示例:
\Yii::$app->runAction('webserver/update-config',['oneValue','anotherValue'];
这是命名参数的示例:
\Yii::$app->runAction('webserver/update-config',[
'servertype' => 'oneSetting','serverdir' => 'anotherSettingValue'
]);
请注意,这使被叫控制器成为调用代码的一部分.因此,如果被叫控制器因某种原因失败,整个程序就会失败.
良好的错误处理是必须的.在被调用的控制器中,您可以设置错误代码以使用return返回.
例:
$iExitCode = \Yii::$app->runAction('webserver/update-config','anotherValue'];
叫控制器:
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;
}
}
?>