Как запретить Yii отдавать код 200 OK ?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Как запретить Yii отдавать код 200 OK ?

Сообщение Stepan Selyuk »

Приветствую,
возникла такая проблема. В контроллере минификации минификатор выдает файлы, и по внутренней своей логике выдает заголовки или 200 и контент, или 304.

Вопрос: как выйти из контроллера, чтобы он не отдал код 200? При этом я не могу использовать \Yii::$app->getResponse()->setStatusCode( 304 ); так как не знаю, какой в данный момент нужно выставлять код, этим занимается минификатор. Нашел для себя выход только через exit(), но это не вызывает правильного завершения приложения (обработки запроса).

Минификатор "mrclay/minify" делает все сам, отправляет заголовки и контент. Нужно просто правильно выйти из контроллера, как это сделать?
Сначала невидимое, затем видимое. И так у всех программистов :)

mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Как запретить Yii отдавать код 200 OK ?

Сообщение mickgeek »


Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Как запретить Yii отдавать код 200 OK ?

Сообщение Stepan Selyuk »

/**
* Terminates the application.
* This method replaces the `exit()` function by ensuring the application life cycle is completed
* before terminating the application.
* @param integer $status the exit status (value 0 means normal exit while other values mean abnormal exit).
* @param Response $response the response to be sent. If not set, the default application [[response]] component will be used.
* @throws ExitException if the application is in testing mode
*/
Судя по всему оно, но не оно)) "@param Response $response the response to be sent. If not set, the default application [[response]] component will be used.". А мне нужно чтобы response вообще не отдавался после отправленных заголовков и тела.
Сначала невидимое, затем видимое. И так у всех программистов :)

Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Как запретить Yii отдавать код 200 OK ?

Сообщение Stepan Selyuk »

Можно конечно наследоваться от Response и поменять там логику, потом передать в \Yii::$app->end(), но ведь должен быть более простой путь.
Сначала невидимое, затем видимое. И так у всех программистов :)

Аватара пользователя
samdark
Администратор
Сообщения: 9358
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Как запретить Yii отдавать код 200 OK ?

Сообщение samdark »

Response и есть тело.

Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: Как запретить Yii отдавать код 200 OK ?

Сообщение anton44eg »

Так 304 выдает веб сервер же

Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Как запретить Yii отдавать код 200 OK ?

Сообщение Stepan Selyuk »

304 выдает контроллер в виде header(), потом печатает вывод (если код 200). Но при завершении контроллера Yii все равно отдает Response и код 200 (если не установлен). То есть получается код 200 с пустым телом ответа (так как при 304 тело пустое), что и рушит кеш в браузерах.

Я предлагаю ввести некую функциональность, чтобы выключить Response, когда его выдача не нужна, например, передав \Yii::$app->getResponse()->setStatusCode( false );
Сначала невидимое, затем видимое. И так у всех программистов :)

Skiller
Сообщения: 627
Зарегистрирован: 2011.11.27, 00:21

Re: Как запретить Yii отдавать код 200 OK ?

Сообщение Skiller »

вы хотети не отсылать код ответа ? забавно ) есть событие beforeSend попробуйте использовать его чтобы сделать финальные изменения в response если надо )

Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

Re: Как запретить Yii отдавать код 200 OK ?

Сообщение Stepan Selyuk »

Достаточно добавить

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

\Yii::$app->response->isSent = true;
 
в конце экшена контроллера, когда этот экшн уже отправил все необходимые данные и заголовки. Это предотвратит отправку данных и заголовков объектом response.
Сначала невидимое, затем видимое. И так у всех программистов :)

Ответить