从控制台调用前端操作时出现意外结果
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.
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;
}
我正在尝试从控制台调用前端操作,例如
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.
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;
}