繁体   English   中英

在 Yii2 中获取 JSON 格式的响应

[英]Get response in JSON format in Yii2

我正在尝试将响应数组转换为 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/文本)

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

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

return之前的某个地方的控制器操作中。

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

return $this->asJson($array);

在您的控制器操作中。

只需在控制器中添加它

public function beforeAction($action)
{

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

首先在您的控制器顶部包含上面的 2 行,然后在您的任何控制器操作中,就在 return 语句之前,包含以下内容

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

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

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'];
}       

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM