Я создаю restful apis
, и у меня была функция для отправки данных ответа в yii1
, как это
public function sendResponse($data)
{
header('Content-Type: application/json; charset=utf-8');
echo CJSON::encode($data);
exit;
}
CJSON
недоступен в Yii2
, так как мне это сделать в Yii2
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,
],
],
Вы можете использовать класс Json в yii2 из
yii\helpers\Json;
Он содержит такие методы, как:
Json::encode();
Json::decode();
Эти методы напрямую конвертируют объекты yii2 activerecord в массив json.
:: find () -> asArray () -> all (); желаю помощи.
Похожие вопросы
Новые вопросы
rest
REST (Transfer State Transfer) - это стиль архитектуры программного обеспечения для распределенных гипермедиа систем, таких как World Wide Web. Его популярность возросла по сравнению с архитектурами RPC, такими как SOAP, из-за внутренней разобщенности клиента с сервером, возникающей из-за наличия единого интерфейса между гетерогенными системами.