ASN
ASN

Reputation: 1863

Get response in JSON format in Yii2

I'm trying to convert and array of response into JSON format. I have tried all the answers that were posted on SO and other websites like web1,web2 adding header('Content-Type: application/json') and then echo json_encode($data,JSON_PRETTY_PRINT); But I'm always getting the output in text format. Can some one help me in solving this.

Helpers Class:

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

My Controller:

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

I tried to printing the userArray and it looks like this:

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

Json output: (html/text)

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

Upvotes: 27

Views: 71606

Answers (5)

Ivošš
Ivošš

Reputation: 1146

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

Upvotes: 1

manglide
manglide

Reputation: 85

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

Firstly include the 2 lines above at the top of your controller, then in any of your Controller actions, just before the return statements, include the below

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

You can build the return array as you deem fit.

Upvotes: 1

Andreas Hinderberger
Andreas Hinderberger

Reputation: 1525

Since Yii 2.0.11 there is a dedicated asJson() method to return a response in JSON format. Run:

return $this->asJson($array);

in your controller action.

Upvotes: 56

Yasar Arafath
Yasar Arafath

Reputation: 625

Simply Add this in controller

public function beforeAction($action)
{

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

Upvotes: 7

Bizley
Bizley

Reputation: 18021

Set

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

in the controller's action somewhere before return.

Upvotes: 55

Related Questions