afterRequest 事件(即請求方法結束后執行事件)
使用場景及原理
該事件是在請求方法結束后執行。可以在該事件中做 trace
,對請求進行追蹤監視以及獲取此次的響應內容。
使用方式說明
框架對 afterRequest
事件的實現在 3.4.x 及以后的版本
中做了新的改動,實現方式由原來舊版本在主服務創建事件(mainServerCreate 事件
)中定義改變為在 initialize 事件 中使用 Di
方式注入。目前最新穩定版本框架(3.4.x
),具體實現及使用方式 (在 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');
// 實現 afterRequest 事件
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_GLOBAL_AFTER_REQUEST, function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response): void {
// 示例:獲取此次請求響應的內容
TrackerManager::getInstance()->getTracker()->endPoint('request');
$responseMsg = $response->getBody()->__toString();
Logger::getInstance()->console('響應內容:' . $responseMsg);
// 響應狀態碼:
// var_dump($response->getStatusCode());
// tracker 結束,結束之后,能看到中途設置的參數,調用棧的運行情況
TrackerManager::getInstance()->closeTracker();
});
}
public static function mainServerCreate(EventRegister $register)
{
}
}
舊版本(3.4.x
之前版本)框架的 afterRequest
事件的實現如下所示:
<?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 事件回調
public static function afterRequest(Request $request, Response $response): void
{
// TODO: Implement afterRequest() method.
// 示例:獲取此次請求響應的內容
TrackerManager::getInstance()->getTracker()->endPoint('request');
$responseMsg = $response->getBody()->__toString();
Logger::getInstance()->console('響應內容:' . $responseMsg);
// 響應狀態碼:
// var_dump($response->getStatusCode());
// tracker 結束,結束之后,能看到中途設置的參數,調用棧的運行情況
TrackerManager::getInstance()->closeTracker();
}
}