afterRequest 事件(即請求方法結束后執(zhí)行事件)
使用場景及原理
該事件是在請求方法結束后執(zhí)行。可以在該事件中做 trace,對請求進行追蹤監(jiān)視以及獲取此次的響應內(nèi)容。
使用方式說明
框架對 afterRequest 事件的實現(xiàn)在 3.4.x 及以后的版本 中做了新的改動,實現(xiàn)方式由原來舊版本在主服務創(chuàng)建事件(mainServerCreate 事件)中定義改變?yōu)樵?initialize 事件 中使用 Di 方式注入。目前最新穩(wěn)定版本框架(3.4.x),具體實現(xiàn)及使用方式 (在 EasySwooleEvent.php 中的 initialize 事件中注入) 如下:
<?php
namespace EasySwoole\EasySwoole;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
class EasySwooleEvent implements Event
{
public static function initialize()
{
date_default_timezone_set('Asia/Shanghai');
// 實現(xiàn) afterRequest 事件
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_GLOBAL_AFTER_REQUEST, function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response): void {
// 示例:獲取此次請求響應的內(nèi)容
TrackerManager::getInstance()->getTracker()->endPoint('request');
$responseMsg = $response->getBody()->__toString();
Logger::getInstance()->console('響應內(nèi)容:' . $responseMsg);
// 響應狀態(tài)碼:
// var_dump($response->getStatusCode());
// tracker 結束,結束之后,能看到中途設置的參數(shù),調(diào)用棧的運行情況
TrackerManager::getInstance()->closeTracker();
});
}
public static function mainServerCreate(EventRegister $register)
{
}
}
舊版本(3.4.x 之前版本)框架的 afterRequest 事件的實現(xiàn)如下所示:
<?php
namespace EasySwoole\EasySwoole;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
class EasySwooleEvent implements Event
{
public static function initialize()
{
// TODO: Implement initialize() method.
date_default_timezone_set('Asia/Shanghai');
}
public static function mainServerCreate(EventRegister $register)
{
// TODO: Implement mainServerCreate() method.
}
public static function onRequest(Request $request, Response $response): bool
{
// TODO: Implement onRequest() method.
return true;
}
// 注冊 afterRequest 事件回調(diào)
public static function afterRequest(Request $request, Response $response): void
{
// TODO: Implement afterRequest() method.
// 示例:獲取此次請求響應的內(nèi)容
TrackerManager::getInstance()->getTracker()->endPoint('request');
$responseMsg = $response->getBody()->__toString();
Logger::getInstance()->console('響應內(nèi)容:' . $responseMsg);
// 響應狀態(tài)碼:
// var_dump($response->getStatusCode());
// tracker 結束,結束之后,能看到中途設置的參數(shù),調(diào)用棧的運行情況
TrackerManager::getInstance()->closeTracker();
}
}