Я создаю restful apis, и у меня была функция для отправки данных ответа в yii1, как это

public function sendResponse($data)
{
    header('Content-Type: application/json; charset=utf-8');
    echo CJSON::encode($data);
    exit;
}

CJSON недоступен в Yii2, так как мне это сделать в Yii2

11
Kuldeep Dangi 8 Мар 2015 в 11:50

3 ответа

Лучший ответ

Нет необходимости вручную устанавливать такой заголовок.

В конкретном действии / методе вы можете установить его так:

use Yii;
use yii\web\Response;

...

public function actionIndex()
{
    Yii::$app->response->format = Response::FORMAT_JSON;
}

Затем после этого просто верните такой простой массив:

return ['param' => $value];

Вы можете найти это свойство в официальных документах здесь.

Для более чем одного действия использование специального фильтра ContentNegotiator - более гибкий подход:

/**
 * @inheritdoc
 */
public function behaviors()
{
    return [
        [
            'class' => ContentNegotiator::className(),
            'only' => ['index', 'view']
            'formats' => [
                'application/json' => Response::FORMAT_JSON,
            ],
        ],
    ];
}

Есть другие настройки, вы можете проверить их в официальных документах.

Что касается REST, базовый yii \ rest \ Controller уже настроен для json и xml:

'contentNegotiator' => [
    'class' => ContentNegotiator::className(),
    'formats' => [
        'application/json' => Response::FORMAT_JSON,
        'application/xml' => Response::FORMAT_XML,
    ],
],
25
arogachev 8 Мар 2015 в 09:15

Вы можете использовать класс Json в yii2 из

yii\helpers\Json;

Он содержит такие методы, как:

Json::encode();
Json::decode();

Эти методы напрямую конвертируют объекты yii2 activerecord в массив json.

2
Vinit Singh 3 Сен 2016 в 11:10

:: find () -> asArray () -> all (); желаю помощи.

3
William Ho 8 Мар 2016 в 04:44