在Yii2中以JSON格式获取响应

时间:2017-01-16 11:10:32

标签: php json yii2 yii2-advanced-app

我试图将响应数组转换为JSON格式。我已尝试在SO和其他网站上发布的所有答案,例如web1web2添加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);
}

我的控制器:

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

我尝试打印userArray,看起来像这样:

Array
(
    [name] => abc
    [lastname] => xyz
    [username] => test_test
)

Json输出:(html / text)

{
    "name": "abc",
    "lastname": "xyz",
    "username": "test_test"
}

5 个答案:

答案 0 :(得分:34)

\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

在控制器的操作return之前的某个位置。

答案 1 :(得分:11)

从Yii 2.0.11开始,有一个专用的asJson()方法以JSON格式返回响应。运行:

return $this->asJson($array);

在你的控制器动作中。

答案 2 :(得分:2)

只需在控制器中添加它

public function beforeAction($action)
{

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

答案 3 :(得分:2)

use yii\helpers\Json;
use yii\web\Response;

首先在控制器顶部包括以上两行,然后在return语句之前的任何Controller动作中,包括以下内容

Yii::$app->response->format = Response::FORMAT_JSON;
return Json::encode([
            'message' => 'success'
]);

您可以根据需要构建return数组。

答案 4 :(得分:0)

use JsonException;
use yii\web\NotFoundHttpException;
use yii\base\InvalidConfigException;
use yii\web\Response;
use yii\web\JsonResponseFormatter;


/**
 * @param int $id
 * @return string[]
 * @throws InvalidConfigException
 * @throws JsonException
 * @throws NotFoundHttpException
 */
public function actionViewJson(): array
{
    Yii::$app->response->format = Response::FORMAT_JSON;
    Yii::$app->response->formatters = [
        Response::FORMAT_JSON => [
            'class' => JsonResponseFormatter::class,
            'prettyPrint' => true
        ]
    ];
    
    return ['key' => 'val'];
}