kublahanov
@kublahanov
Веб-разработчик

Для чего нужен в Yii2 фильтр ContentNegotiator?

Не совсем понятно назначение этого фильтра.

В документации сказано:
ContentNegotiator поддерживает согласование формата ответа и языка приложения. Он пытается определить формат ответа и/или язык, путём проверки GET параметров и HTTP заголовка Accept.

  • т. е. он, в зависимости от содержимого заголовков Accept и Accept-Language, определяет выполнять ли action?
  • или позволяет использовать какие-то данные, чтобы самостоятельно выбрать в action формат ответа?
  • и причём здесь GET-параметр? разве недостаточно HTTP-заголовка?
  • Вопрос задан
  • 1098 просмотров
Решения вопроса 1
mitaichik
@mitaichik
Вот документация https://github.com/yiisoft/yii2/blob/master/docs/g...

Основное назначение - вернуть ответ в правильном формате.

В заголовке Accept клиент указывает в каком формате ему нужны данные, например json или xml
Из экшена ты можешь возвращать не только строку, но модель, массив (в том числе и моделей), дата-провайдр и т.п.

ContentNegotiator приводит эти данные к требуемому формату - например, сериализует модель в json, устанавливает заголовки и т.д. Правила сериализации можно описать в модели, или же реализовать свой сериализатор (в документаци это, увы, раскиданно в разных местах). Вообщем, для создания api - необходимая штука.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@matperez
Ну да, вы сами себе ответили.
Посмотрите код. Там, в принципе, видно, что язык и формат ответа можно передавать как через заголовки, так и через GET параметры _lang и _format.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы