我试图从控制台调用前端动作,如
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()),我得到预期结果"嗨嗨"。
答案 0 :(得分:1)
在Yii2控制台中,\Yii:$app::runAction()
不会从操作中返回数据。
runAction()
会从控制台应用程序返回退出代码,因此您获得0
,这意味着正常:
行动的结果。这可以是退出代码或Response对象。退出代码0表示正常,其他值表示异常。退出代码null也被标记为0。
前端行动:
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;
}