Reputation: 1863
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
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
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
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
Reputation: 625
Simply Add this in controller
public function beforeAction($action)
{
\Yii::$app->response->format = Response::FORMAT_JSON;
return parent::beforeAction($action);
}
Upvotes: 7
Reputation: 18021
Set
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
in the controller's action somewhere before return
.
Upvotes: 55