从控制台调用前端操作时出现意外结果

unexpected result when call frontend action from console

我正在尝试从控制台调用前端操作,例如

php yii cron/test

控制台操作如下:

public function actionTest(){
yii::$app->controllerNamespace = "frontend\controllers";
   $test = Yii::$app->runAction('web-service/test', [
]);
echo $test;
}

前端操作如下:

public function beforeAction($action)
{
 if ($action->id == 'test') {
   $this->enableCsrfValidation = false;
 }
 return parent::beforeAction($action);
}

function actionTest(){
 $x="hi ";
 echo $x;
 return $x;
}

在命令 prmpot 中我得到这样的结果

hi 0  // i have really tested this codes

"hi" 是因为 actionTest 中的 echo 但我不明白为什么控制台中打印的 $test 是 0?

似乎 "return $x" 不会工作并且 $x 不会返回到控制台操作。

如果我将前端操作移动到组件之类的地方(当然会进行更改,例如删除 beforeaction() 并调用组件而不是 runaction()),我会得到预期的结果 "hi hi"。

在 Yii2 控制台中,\Yii:$app::runAction() 不会 return 来自操作的数据。

runAction() return 是控制台应用程序的退出代码,因此您得到 0,这意味着正常:

The result of the action. This can be either an exit code or Response object. Exit code 0 means normal, and other values mean abnormal. Exit code of null is treaded as 0 as well.

yii-console-application#runAction()


Return响应对象演示

前端操作:

public function actionTest($value='')
{
    return (object)['title'=>'Empty Object'];
}

控制台操作:

public function actionTest($message = 'hello world')
{
    yii::$app->controllerNamespace = "frontend\controllers";
    $test = Yii::$app->runAction('web-service/test');
    echo $test->title;
}