版本控制

Easyswoole 提供了高自由度的版本控制插件,版本控制的代码实现主要文件均在Core\Component\Version目录中;
而版本控制的核心关键点在于对onRequest事件进行全局拦截,再做版本鉴定和请求重新分发。

使用

首先,在App目录下建立Version目录,并在目录内建立如下示例Version类文件,该类主要进行版本设置等。

  1. <?php
  2. namespace App\Version;
  3. use Core\Component\Version\AbstractRegister;
  4. use Core\Component\Version\VersionList;
  5. use Core\Http\Request;
  6. use Core\Http\Response;
  7. class Version extends AbstractRegister
  8. {
  9. function register(VersionList $versionList)
  10. {
  11. // 对v2版本的信息进行设置,验证字段为version(请求时必带version => 版本号)
  12. $v2 = $versionList->add('v2', function () {
  13. if (Request::getInstance()->getRequestParam('version') == '2') {
  14. return true;
  15. } else {
  16. return false;
  17. }
  18. });
  19. // 设置路径等信息同自定义路由功能一致
  20. $v2->register()->addRoute(['GET', 'POST'], '/version', function () {
  21. Response::getInstance()->write('this is test 1');
  22. Response::getInstance()->end();
  23. });
  24. $v2->register()->addRoute(['GET', 'POST'], '/version/test', function () {
  25. Response::getInstance()->write('this is test 2');
  26. Response::getInstance()->end();
  27. });
  28. }
  29. }

其中 :

在设置完以上版本控制规则后,在Event的OnRequest事件中开启版本处理。

  1. function onRequest(Request $request, Response $response)
  2. {
  3. // TODO: Implement onRequest() method.f
  4. Controller::getInstance(Version::class)->startController();
  5. }

版本控制会先找到当前匹配version设置的回调结果进行处理,如果既不是路径字符串,也不是闭包,再找 control 实例的defaulthandler,也没有设置默认的再找 control 实例的defaulthandler,最后走dispatch直接解析 url 。