Jua*_*rja 4 php json controller response yii2
我一直在寻找互联网上的答案,并与我的合作伙伴进行了讨论,但仍不确定在yii2控制器中返回json的最佳选择。这里的选项:
public function actionExample (){//1
// do something whit $data result ...
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return $data;
}
public function actionExample (){//2
// do something whit $data result ...
echo json_encode($data);
Yii::$app->end();
}
Run Code Online (Sandbox Code Playgroud)
我认为第一个选择是RESTful控制器的最佳选择(更优雅)。但是,如果无法确定对控制器的所有调用是否都可以接收json,或者如果某些调用是异步的,则第二个选项可能是最好的选择,则应停止ejecution。希望有人能解释一下每种方法的优缺点
控制器对此具有专用的快捷方式- asJson():
return $this->asJson($data);
Run Code Online (Sandbox Code Playgroud)
但这等同于
$response = Yii::$app->getResponse();
$response->format = Response::FORMAT_JSON;
$response->data = $data;
return $response;
Run Code Online (Sandbox Code Playgroud)
要么
Yii::$app->response->format = Response::FORMAT_JSON;
return $data;
Run Code Online (Sandbox Code Playgroud)
因此,这三个选项将相同。
Run Code Online (Sandbox Code Playgroud)public function actionExample (){//2 // do something whit $data result ... echo json_encode($data); Yii::$app->end(); }
这是不正确的-您不应该在控制器中回显,它可能会在最新版本的Yii2中引发异常。它还不会使用正确的Content-Type标头,因此客户端可能会将结果视为text / html而不是JSON。