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

时间:2017-06-25 16:45:30

标签: yii2 yii2-advanced-app

我试图从控制台调用前端动作,如

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

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

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

如果我将前端动作移动到组件之类的某个地方(当然有更改,比如删除beforeaction()和调用组件而不是runaction()),我得到预期结果"嗨嗨"。

1 个答案:

答案 0 :(得分:1)

在Yii2控制台中,\Yii:$app::runAction()不会从操作中返回数据。

runAction()会从控制台应用程序返回退出代码,因此您获得0,这意味着正常:

  

行动的结果。这可以是退出代码或Response对象。退出代码0表示正常,其他值表示异常。退出代码null也被标记为0。

     

yii-console-application#runAction()

返回响应对象演示

前端行动:

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;
}