Как запретить Yii отдавать код 200 OK ?
- Stepan Selyuk
- Сообщения: 198
- Зарегистрирован: 2010.02.03, 05:51
- Откуда: Cyprus, Limassol
- Контактная информация:
Как запретить Yii отдавать код 200 OK ?
Приветствую,
возникла такая проблема. В контроллере минификации минификатор выдает файлы, и по внутренней своей логике выдает заголовки или 200 и контент, или 304.
Вопрос: как выйти из контроллера, чтобы он не отдал код 200? При этом я не могу использовать \Yii::$app->getResponse()->setStatusCode( 304 ); так как не знаю, какой в данный момент нужно выставлять код, этим занимается минификатор. Нашел для себя выход только через exit(), но это не вызывает правильного завершения приложения (обработки запроса).
Минификатор "mrclay/minify" делает все сам, отправляет заголовки и контент. Нужно просто правильно выйти из контроллера, как это сделать?
возникла такая проблема. В контроллере минификации минификатор выдает файлы, и по внутренней своей логике выдает заголовки или 200 и контент, или 304.
Вопрос: как выйти из контроллера, чтобы он не отдал код 200? При этом я не могу использовать \Yii::$app->getResponse()->setStatusCode( 304 ); так как не знаю, какой в данный момент нужно выставлять код, этим занимается минификатор. Нашел для себя выход только через exit(), но это не вызывает правильного завершения приложения (обработки запроса).
Минификатор "mrclay/minify" делает все сам, отправляет заголовки и контент. Нужно просто правильно выйти из контроллера, как это сделать?
Сначала невидимое, затем видимое. И так у всех программистов :)
- Stepan Selyuk
- Сообщения: 198
- Зарегистрирован: 2010.02.03, 05:51
- Откуда: Cyprus, Limassol
- Контактная информация:
Re: Как запретить Yii отдавать код 200 OK ?
Судя по всему оно, но не оно)) "@param Response $response the response to be sent. If not set, the default application [[response]] component will be used.". А мне нужно чтобы response вообще не отдавался после отправленных заголовков и тела./**
* 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
*/
Сначала невидимое, затем видимое. И так у всех программистов :)
- Stepan Selyuk
- Сообщения: 198
- Зарегистрирован: 2010.02.03, 05:51
- Откуда: Cyprus, Limassol
- Контактная информация:
Re: Как запретить Yii отдавать код 200 OK ?
Можно конечно наследоваться от Response и поменять там логику, потом передать в \Yii::$app->end(), но ведь должен быть более простой путь.
Сначала невидимое, затем видимое. И так у всех программистов :)
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Как запретить Yii отдавать код 200 OK ?
Response и есть тело.
Нравится Yii? Давайте сделаем его лучше!.
Re: Как запретить Yii отдавать код 200 OK ?
Так 304 выдает веб сервер же
- Stepan Selyuk
- Сообщения: 198
- Зарегистрирован: 2010.02.03, 05:51
- Откуда: Cyprus, Limassol
- Контактная информация:
Re: Как запретить Yii отдавать код 200 OK ?
304 выдает контроллер в виде header(), потом печатает вывод (если код 200). Но при завершении контроллера Yii все равно отдает Response и код 200 (если не установлен). То есть получается код 200 с пустым телом ответа (так как при 304 тело пустое), что и рушит кеш в браузерах.
Я предлагаю ввести некую функциональность, чтобы выключить Response, когда его выдача не нужна, например, передав \Yii::$app->getResponse()->setStatusCode( false );
Я предлагаю ввести некую функциональность, чтобы выключить Response, когда его выдача не нужна, например, передав \Yii::$app->getResponse()->setStatusCode( false );
Сначала невидимое, затем видимое. И так у всех программистов :)
Re: Как запретить Yii отдавать код 200 OK ?
вы хотети не отсылать код ответа ? забавно ) есть событие beforeSend попробуйте использовать его чтобы сделать финальные изменения в response если надо )
- Stepan Selyuk
- Сообщения: 198
- Зарегистрирован: 2010.02.03, 05:51
- Откуда: Cyprus, Limassol
- Контактная информация:
Re: Как запретить Yii отдавать код 200 OK ?
Достаточно добавить
в конце экшена контроллера, когда этот экшн уже отправил все необходимые данные и заголовки. Это предотвратит отправку данных и заголовков объектом response.
Код: Выделить всё
\Yii::$app->response->isSent = true;
Сначала невидимое, затем видимое. И так у всех программистов :)