Json что писать в Controller

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
astappev
Сообщения: 20
Зарегистрирован: 2014.02.18, 20:39

Json что писать в Controller

Сообщение astappev »

Помогите в очередной раз.
Есть conroller который формирует json массив и выводит его. Масив рабочий, но он не доступен из вне.
Подскажите что нуно настроить в контроллере что бы все action были доступны json для cross-domain.
Я пытался разобрать эту тему https://github.com/yiisoft/yii2/blob/ma ... ide/url.md
Там есть раздел Handling REST requests -> Json API.
Но там вяло расписано.
astappev
Сообщения: 20
Зарегистрирован: 2014.02.18, 20:39

Re: Json что писать в Controller

Сообщение astappev »

Есть вот такая штука https://github.com/yiisoft/yii2/issues/2034
Но проблему не удалось решить. При добавлении Yii::$app->response->format = Response::FORMAT_JSON;
В массив добавляются обратные слеши ко всем кавычкам, ну и XMLHttpRequest cannot load это не решило.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Json что писать в Controller

Сообщение zelenin »

каким образом json относится к cross domain?
astappev
Сообщения: 20
Зарегистрирован: 2014.02.18, 20:39

Re: Json что писать в Controller

Сообщение astappev »

Не знаю, я noob и неправильно сформулировал.
В общем, сейчас ситуация такова.
Как записать

Код: Выделить всё

header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
Используя возможности Yii2, для всего контроллера.
IvanChe
Сообщения: 89
Зарегистрирован: 2012.11.25, 18:55

Re: Json что писать в Controller

Сообщение IvanChe »

прямо так перед рендером и вставляй хедеры
astappev
Сообщения: 20
Зарегистрирован: 2014.02.18, 20:39

Re: Json что писать в Controller

Сообщение astappev »

Я то вставил, работает. Но есть же более цивилизованные способы.
Например,

Код: Выделить всё

Yii::$app->response->format = Response::FORMAT_JSON;
только по идее должно работать, но не работает.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Json что писать в Controller

Сообщение zelenin »

astappev писал(а):Я то вставил, работает. Но есть же более цивилизованные способы.
Например,

Код: Выделить всё

Yii::$app->response->format = Response::FORMAT_JSON; 
только по идее должно работать, но не работает.
так напишите код, который не работает.
astappev
Сообщения: 20
Зарегистрирован: 2014.02.18, 20:39

Re: Json что писать в Controller

Сообщение astappev »

Ну вот именно 'этот Yii::$app->response->format = Response::FORMAT_JSON; и не работает. Строки будто и нет. А теоретически предполагаю что должно быть по аналогии с header('Content-Type: application/json');
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Json что писать в Controller

Сообщение zelenin »

astappev писал(а):Ну вот именно 'этот Yii::$app->response->format = Response::FORMAT_JSON; и не работает. Строки будто и нет. А теоретически предполагаю что должно быть по аналогии с header('Content-Type: application/json');
это просто строка присваивания. Напишите весь код, котоырй у вас не работает, хотя должен, как вы думаете, работать.
astappev
Сообщения: 20
Зарегистрирован: 2014.02.18, 20:39

Re: Json что писать в Controller

Сообщение astappev »

Контроллер который должен возвращать данные в формате json. Как задать формат возвращаемой страницы через ядро Yii2?
Собственно тот формат который я сейчас задаю таким образом:

Код: Выделить всё

header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json'); 
Ну а весь controller/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);
    } 
А хочу избавится от вышеупомянутых двух строк и объявить их средствами Yii и для всего контроллера, а не только для отдельного action.
lancedevnull
Сообщения: 1268
Зарегистрирован: 2013.07.17, 17:37

Re: Json что писать в Controller

Сообщение lancedevnull »

response->format=RESPONSE::FORMAT_JSON
или просто вернуть массив в конце экшена
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Json что писать в Controller

Сообщение zelenin »

astappev писал(а):Контроллер который должен возвращать данные в формате json. Как задать формат возвращаемой страницы через ядро Yii2?
Собственно тот формат который я сейчас задаю таким образом:

Код: Выделить всё

header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
Ну а весь controller/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);
    }
А хочу избавится от вышеупомянутых двух строк и объявить их средствами Yii и для всего контроллера, а не только для отдельного action.
приведите код, который у вас не работает, а не от которого хотите избавиться.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Json что писать в Controller

Сообщение vova07 »

Вот рабочий пример. Все точно работает. Если у вас не работает, стоит убедится в том что вы используете последнию версию фрейма из "master".
astappev
Сообщения: 20
Зарегистрирован: 2014.02.18, 20:39

Re: Json что писать в Controller

Сообщение astappev »

Чудно, сейчас формат установился нормально, осталось заменить header('Access-Control-Allow-Origin: *');
Вероятно проблема с RESPONSE::FORMAT_JSON исчезла после какого то обновления.
Аватара пользователя
hippik
Сообщения: 57
Зарегистрирован: 2011.12.11, 23:33
Откуда: Москва

Re: Json что писать в Controller

Сообщение hippik »

Так в контроллере можно отдавать данные в JSON

Код: Выделить всё

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['contentNegotiator'] = [
        'class' => ContentNegotiator::className(),
        'formats' => [
            'application/json' => Response::FORMAT_JSON
        ]

        ];

        return $behaviors;
    }
Ответить