Json что писать в Controller
Json что писать в Controller
Помогите в очередной раз.
Есть conroller который формирует json массив и выводит его. Масив рабочий, но он не доступен из вне.
Подскажите что нуно настроить в контроллере что бы все action были доступны json для cross-domain.
Я пытался разобрать эту тему https://github.com/yiisoft/yii2/blob/ma ... ide/url.md
Там есть раздел Handling REST requests -> Json API.
Но там вяло расписано.
Есть conroller который формирует json массив и выводит его. Масив рабочий, но он не доступен из вне.
Подскажите что нуно настроить в контроллере что бы все action были доступны json для cross-domain.
Я пытался разобрать эту тему https://github.com/yiisoft/yii2/blob/ma ... ide/url.md
Там есть раздел Handling REST requests -> Json API.
Но там вяло расписано.
Re: Json что писать в Controller
Есть вот такая штука https://github.com/yiisoft/yii2/issues/2034
Но проблему не удалось решить. При добавлении Yii::$app->response->format = Response::FORMAT_JSON;
В массив добавляются обратные слеши ко всем кавычкам, ну и XMLHttpRequest cannot load это не решило.
Но проблему не удалось решить. При добавлении Yii::$app->response->format = Response::FORMAT_JSON;
В массив добавляются обратные слеши ко всем кавычкам, ну и XMLHttpRequest cannot load это не решило.
Re: Json что писать в Controller
каким образом json относится к cross domain?
Re: Json что писать в Controller
Не знаю, я noob и неправильно сформулировал.
В общем, сейчас ситуация такова.
Как записать
Используя возможности Yii2, для всего контроллера.
В общем, сейчас ситуация такова.
Как записать
Код: Выделить всё
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
Re: Json что писать в Controller
прямо так перед рендером и вставляй хедеры
Re: Json что писать в Controller
Я то вставил, работает. Но есть же более цивилизованные способы.
Например,
только по идее должно работать, но не работает.
Например,
Код: Выделить всё
Yii::$app->response->format = Response::FORMAT_JSON;
Re: Json что писать в Controller
так напишите код, который не работает.astappev писал(а):Я то вставил, работает. Но есть же более цивилизованные способы.
Например,только по идее должно работать, но не работает.Код: Выделить всё
Yii::$app->response->format = Response::FORMAT_JSON;
Re: Json что писать в Controller
Ну вот именно 'этот Yii::$app->response->format = Response::FORMAT_JSON; и не работает. Строки будто и нет. А теоретически предполагаю что должно быть по аналогии с header('Content-Type: application/json');
Re: Json что писать в Controller
это просто строка присваивания. Напишите весь код, котоырй у вас не работает, хотя должен, как вы думаете, работать.astappev писал(а):Ну вот именно 'этот Yii::$app->response->format = Response::FORMAT_JSON; и не работает. Строки будто и нет. А теоретически предполагаю что должно быть по аналогии с header('Content-Type: application/json');
Re: Json что писать в Controller
Контроллер который должен возвращать данные в формате json. Как задать формат возвращаемой страницы через ядро Yii2?
Собственно тот формат который я сейчас задаю таким образом:
Ну а весь controller/action сейчас выглядит так.
А хочу избавится от вышеупомянутых двух строк и объявить их средствами Yii и для всего контроллера, а не только для отдельного action.
Собственно тот формат который я сейчас задаю таким образом:
Код: Выделить всё
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
Код: Выделить всё
public function actionItem($id)
{
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
$item = array('id' => $id);
$cost = (new \yii\db\Query)
->select('count(*) as count, min(price_sell/stuck) as min, avg(price_sell/stuck) as avg, max(price_sell/stuck) as max')
->from('tg_prices')
->where('item_id=:id', [':id' => $id])
->one();
$item = array_merge((array)$item, (array)$cost);
return json_encode($item, JSON_UNESCAPED_UNICODE);
}
-
- Сообщения: 1268
- Зарегистрирован: 2013.07.17, 17:37
Re: Json что писать в Controller
response->format=RESPONSE::FORMAT_JSON
или просто вернуть массив в конце экшена
или просто вернуть массив в конце экшена
Re: Json что писать в Controller
приведите код, который у вас не работает, а не от которого хотите избавиться.astappev писал(а):Контроллер который должен возвращать данные в формате json. Как задать формат возвращаемой страницы через ядро Yii2?
Собственно тот формат который я сейчас задаю таким образом:Ну а весь controller/action сейчас выглядит так.Код: Выделить всё
header('Access-Control-Allow-Origin: *'); header('Content-Type: application/json');
А хочу избавится от вышеупомянутых двух строк и объявить их средствами Yii и для всего контроллера, а не только для отдельного action.Код: Выделить всё
public function actionItem($id) { header('Access-Control-Allow-Origin: *'); header('Content-Type: application/json'); $item = array('id' => $id); $cost = (new \yii\db\Query) ->select('count(*) as count, min(price_sell/stuck) as min, avg(price_sell/stuck) as avg, max(price_sell/stuck) as max') ->from('tg_prices') ->where('item_id=:id', [':id' => $id]) ->one(); $item = array_merge((array)$item, (array)$cost); return json_encode($item, JSON_UNESCAPED_UNICODE); }
Re: Json что писать в Controller
Вот рабочий пример. Все точно работает. Если у вас не работает, стоит убедится в том что вы используете последнию версию фрейма из "master".
Re: Json что писать в Controller
Чудно, сейчас формат установился нормально, осталось заменить header('Access-Control-Allow-Origin: *');
Вероятно проблема с RESPONSE::FORMAT_JSON исчезла после какого то обновления.
Вероятно проблема с RESPONSE::FORMAT_JSON исчезла после какого то обновления.
Re: Json что писать в Controller
Так в контроллере можно отдавать данные в JSON
Код: Выделить всё
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['contentNegotiator'] = [
'class' => ContentNegotiator::className(),
'formats' => [
'application/json' => Response::FORMAT_JSON
]
];
return $behaviors;
}