web-dev-qa-db-fra.com

Obtenez une réponse au format JSON dans Yii2

J'essaie de convertir et de tableau de réponse au format JSON. J'ai essayé toutes les réponses publiées sur SO et d'autres sites Web comme web1 , web2 en ajoutant header('Content-Type: application/json') et alors echo json_encode($data,JSON_PRETTY_PRINT); Mais je reçois toujours la sortie au format texte. Quelqu'un peut-il m'aider à résoudre ce problème.

Classe des aides:

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

Mon contrôleur:

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

J'ai essayé d'imprimer le userArray et ça ressemble à ceci:

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

Sortie Json: (html/texte)

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

Ensemble

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

dans l'action du contrôleur quelque part avant return.

35
Bizley

Depuis Yii 2.0.11, il existe une méthode asJson() dédiée pour renvoyer une réponse au format JSON. Exécuter:

return $this->asJson($array);

dans l'action de votre contrôleur.

14

Ajoutez simplement ceci dans le contrôleur

public function beforeAction($action)
{

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