afterRequest 事件(即请求方法结束后执行事件)

使用场景及原理

该事件是在请求方法结束后执行。可以在该事件中做 trace,对请求进行追踪监视以及获取此次的响应内容。

使用方式说明

框架对 afterRequest 事件的实现在 3.4.x 及以后的版本 中做了新的改动,实现方式由原来旧版本在主服务创建事件(mainServerCreate 事件)中定义改变为在 initialize 事件 中使用 Di 方式注入。目前最新稳定版本框架(3.4.x),具体实现及使用方式 (在 EasySwooleEvent.php 中的 initialize 事件中注入) 如下:

  1. <?php
  2. namespace EasySwoole\EasySwoole;
  3. use EasySwoole\EasySwoole\AbstractInterface\Event;
  4. use EasySwoole\EasySwoole\Swoole\EventRegister;
  5. class EasySwooleEvent implements Event
  6. {
  7. public static function initialize()
  8. {
  9. date_default_timezone_set('Asia/Shanghai');
  10. // 实现 afterRequest 事件
  11. \EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_GLOBAL_AFTER_REQUEST, function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response): void {
  12. // 示例:获取此次请求响应的内容
  13. TrackerManager::getInstance()->getTracker()->endPoint('request');
  14. $responseMsg = $response->getBody()->__toString();
  15. Logger::getInstance()->console('响应内容:' . $responseMsg);
  16. // 响应状态码:
  17. // var_dump($response->getStatusCode());
  18. // tracker 结束,结束之后,能看到中途设置的参数,调用栈的运行情况
  19. TrackerManager::getInstance()->closeTracker();
  20. });
  21. }
  22. public static function mainServerCreate(EventRegister $register)
  23. {
  24. }
  25. }

旧版本(3.4.x 之前版本)框架的 afterRequest 事件的实现如下所示:

  1. <?php
  2. namespace EasySwoole\EasySwoole;
  3. use EasySwoole\EasySwoole\Swoole\EventRegister;
  4. use EasySwoole\EasySwoole\AbstractInterface\Event;
  5. use EasySwoole\Http\Request;
  6. use EasySwoole\Http\Response;
  7. class EasySwooleEvent implements Event
  8. {
  9. public static function initialize()
  10. {
  11. // TODO: Implement initialize() method.
  12. date_default_timezone_set('Asia/Shanghai');
  13. }
  14. public static function mainServerCreate(EventRegister $register)
  15. {
  16. // TODO: Implement mainServerCreate() method.
  17. }
  18. public static function onRequest(Request $request, Response $response): bool
  19. {
  20. // TODO: Implement onRequest() method.
  21. return true;
  22. }
  23. // 注册 afterRequest 事件回调
  24. public static function afterRequest(Request $request, Response $response): void
  25. {
  26. // TODO: Implement afterRequest() method.
  27. // 示例:获取此次请求响应的内容
  28. TrackerManager::getInstance()->getTracker()->endPoint('request');
  29. $responseMsg = $response->getBody()->__toString();
  30. Logger::getInstance()->console('响应内容:' . $responseMsg);
  31. // 响应状态码:
  32. // var_dump($response->getStatusCode());
  33. // tracker 结束,结束之后,能看到中途设置的参数,调用栈的运行情况
  34. TrackerManager::getInstance()->closeTracker();
  35. }
  36. }