2017-01-16 2 views
4

Я пытаюсь преобразовать и массировать ответ в формате JSON. Я пробовал все ответы, которые были размещены на SO и других сайтах, таких как web1, web2, добавив header('Content-Type: application/json'), а затем echo json_encode($data,JSON_PRETTY_PRINT); Но я всегда получаю вывод в текстовом формате. Может ли кто-нибудь помочь мне в решении этого вопроса.Получите ответ в формате JSON- yii2 и php

Помощники Класс:

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" 
} 

ответ

12

Set

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

в действии контроллера где-то до return.

+0

Благодаря Bizley. Работает. Могу ли я добавить его в «вспомогательный класс» перед выражением 'echo', так как я буду называть эту функцию в разных местах. – ASN

+0

Прежде всего, вы должны «возвращать» данные, а не 'echo'. Он может быть где угодно, пока он влияет на текущий ответ. – Bizley

+0

ok Bizley. Я изменю его, чтобы возвращать вместо echo (но изменение его для возврата дает мне пустой результат. Я проверяю код на почтальоне, и в выходе ничего нет). И я добавил заявление в 'behaviors()' метод в контроллере – ASN

2

Просто Добавьте это в контроллер

public function beforeAction($action) 
{ 

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