在Yii2中以JSON格式获取响应

ASN*_*ASN 13 php json yii2 yii2-advanced-app

我正在尝试将响应数组转换为JSON格式.我已经尝试了在SO和其他网站上发布的所有答案,如web1,web2添加header('Content-Type: application/json'),然后echo json_encode($data,JSON_PRETTY_PRINT); 我总是以文本格式获得输出.有人可以帮助我解决这个问题.

助手班级:

public static function renderJSON($data) {
    header('Content-Type: application/json');
    echo json_encode($data,JSON_PRETTY_PRINT);
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

if ($model->login()) {
    $user =  User::findByUsernameOrEmail($request->post('username'));
    $userArray = ArrayHelper::toArray($user);
    Helpers::renderJSON($userArray);
Run Code Online (Sandbox Code Playgroud)

我试着打印userArray它看起来像这样:

Array
(
    [name] => abc
    [lastname] => xyz
    [username] => test_test
)
Run Code Online (Sandbox Code Playgroud)

Json输出:(html/text)

{
    "name": "abc",
    "lastname": "xyz",
    "username": "test_test"
}
Run Code Online (Sandbox Code Playgroud)

Biz*_*ley 38

\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
Run Code Online (Sandbox Code Playgroud)

在控制器的行动之前的某个地方return.


And*_*ger 17

从Yii 2.0.11开始,有一种专用asJson()方法以JSON格式返回响应.跑:

return $this->asJson($array);
Run Code Online (Sandbox Code Playgroud)

在你的控制器动作中.


Yas*_*ath 7

只需在控制器中添加它

public function beforeAction($action)
{

    \Yii::$app->response->format = Response::FORMAT_JSON;
    return parent::beforeAction($action);
}
Run Code Online (Sandbox Code Playgroud)