Разные объекты Response для контроллеров

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

Разные объекты Response для контроллеров

Сообщение YafusOriginal »

Добрый вечер!

У меня следующая архитектура проекта. Есть контроллеры которые выдают html страницы и есть контроллеры, которые используются для получения данных в json формате (эти данные потом обрабатываются в VUE).

Мне нужно для всех API контроллеров сделать:
- что бы ответ был в json формате
- что бы в ответе всегда направлялся массив с элементами state, error, data.
В state ставиться "ок" если контроллер отдал нормальный ответ. Если было исключение в контроллере или внутри самого YII, то state = "error".
В error пишутся ошибки.
В data дописывается ответ от контроллера.

Насколько я понимаю эту логику нужно реализовать в базовом классе для всех API контроллеров в behaviors, но пока в голову не приходит как это реализовать.

Поделитесь, кто может, схемой реализацией или просто направьте по правильному пути.
YafusOriginal
Сообщения: 11
Зарегистрирован: 2019.06.14, 16:24

Re: Разные объекты Response для контроллеров

Сообщение YafusOriginal »

Не понял, что вы хотели сказать этой ссылкой.
Повторюсь. Мне нужно менять формат ответа только для определенных контроллеров. Те, которые отдают html я менять не хочу.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Разные объекты Response для контроллеров

Сообщение yiiliveext »

YafusOriginal писал(а): 2020.03.12, 20:24
Не понял, что вы хотели сказать этой ссылкой.
Повторюсь. Мне нужно менять формат ответа только для определенных контроллеров. Те, которые отдают html я менять не хочу.

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

public function behaviors()
    {
        $behaviors = parent::behaviors();

        $behaviors['contentNegotiator'] = [
            'class' => \yii\filters\ContentNegotiator::className(),
            'formats' => [
                'text/html' => \yii\web\Response::FORMAT_HTML,
            ],
        ];

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