Как преобразовать массив в json в yii2

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

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

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

Ответ 1

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

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

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,
    ],
],

Ответ 2

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

yii\helpers\Json;

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

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

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

Ответ 3

:: находка() → asArray() → все(); пожелать помощи.