Как регистрировать все HTTP-запросы на сайт, используя фреймворк Yii?
Я хочу регистрировать все HTTP-запросы на сайт, фреймворк Yii.
Могу ли я использовать стандартные возможности фреймворка?
2 answers
Мы сделали это с помощью onBeginRequest
или onEndRequest
. Смотрите дополнительную информацию здесь: Как использовать события в Yii
По сути, вы связываете событие глобального запроса со своим собственным классом, а затем делаете все, что хотите.
В Yii2 события называются beforeRequest
и afterRequest
(http://www.yiiframework.com/doc-2.0/guide-structure-applications.html)
Например:
Yii::$app->on('afterRequest', function($event) {
//do something...
//response object is in $event->sender->response
//response data is in $event->sender->response->data
//request object is in $event->sender->request
});
Но это до того, как данные ответа были подготовлены в содержимое ответа (в соответствии с форматом ответа , например. Response::FORMAT_JSON
), поэтому, если вы хотите получить истинное окончательное тело ответа, вам нужно это сделать (http://www.yiiframework.com/doc-2.0/guide-runtime-responses.html#sending-response):
Yii::$app->response->on(\yii\web\Response::EVENT_AFTER_SEND, function($event) { //alternatively use EVENT_AFTER_PREPARE
//now you can access $event->sender->content and eg. $event->sender->getHeaders()
//Also, you have access to the request through Yii::$app->request
});