2.1 升级指南

  • 2.1 版本主要增加了底层驱动 hyperf/engine,允许 Hyperf 框架跑在 SwooleSwow 之上。
  • PHP 最低版本由 7.2 修改为 7.3

Swow 暂为预览版本,请谨慎使用。

修改 Hyperf 组件版本

直接将 composer.json 中的 hyperf/* 统一修改为 2.1.* 即可。

  1. {
  2. "require": {
  3. "php": ">=7.3",
  4. "ext-json": "*",
  5. "ext-openssl": "*",
  6. "ext-pdo": "*",
  7. "ext-pdo_mysql": "*",
  8. "ext-redis": "*",
  9. "ext-swoole": ">=4.5",
  10. "hyperf/async-queue": "2.1.*",
  11. "hyperf/cache": "2.1.*",
  12. "hyperf/command": "2.1.*",
  13. "hyperf/config": "2.1.*",
  14. "hyperf/constants": "2.1.*",
  15. "hyperf/contract": "2.1.*",
  16. "hyperf/database": "2.1.*",
  17. "hyperf/db-connection": "2.1.*",
  18. "hyperf/di": "2.1.*",
  19. "hyperf/dispatcher": "2.1.*",
  20. "hyperf/event": "2.1.*",
  21. "hyperf/exception-handler": "2.1.*",
  22. "hyperf/framework": "2.1.*",
  23. "hyperf/guzzle": "2.1.*",
  24. "hyperf/http-server": "2.1.*",
  25. "hyperf/logger": "2.1.*",
  26. "hyperf/model-cache": "2.1.*",
  27. "hyperf/pool": "2.1.*",
  28. "hyperf/process": "2.1.*",
  29. "hyperf/redis": "2.1.*",
  30. "hyperf/server": "2.1.*",
  31. "hyperf/utils": "2.1.*"
  32. },
  33. "require-dev": {
  34. "friendsofphp/php-cs-fixer": "^2.14",
  35. "hyperf/devtool": "2.1.*",
  36. "hyperf/testing": "2.1.*",
  37. "mockery/mockery": "^1.0",
  38. "phpstan/phpstan": "^0.12.18",
  39. "swoole/ide-helper": "dev-master",
  40. "symfony/var-dumper": "^5.1"
  41. }
  42. }

后面只需要执行 composer update -o,就可以正常完成升级了。

增加 optimize-autoloader 配置

因为 Hyperf 自从 2.0 开始,需要使用到 composer 生成的 class_map,这就要求用户每次更新依赖都要使用 -o 进行优化,但很多用户从来没有这个习惯。 于是我们建议在 composer.json 中增加对应配置,以满足这个需要。

  1. {
  2. "config": {
  3. "optimize-autoloader": true,
  4. "sort-packages": true
  5. }
  6. }

修改 SwooleEvent

Hyperf\Server\SwooleEvent2.1 中已经更名为 Hyperf\Server\Event,所以我们需要在 server.php 配置中修改对应代码。

SwooleEvent 会在 3.0 中正式被移除,请尽快修改为 Event

  1. <?php
  2. declare(strict_types=1);
  3. use Hyperf\Server\Event;
  4. use Hyperf\Server\Server;
  5. return [
  6. 'mode' => SWOOLE_BASE,
  7. 'servers' => [
  8. [
  9. 'name' => 'http',
  10. 'type' => Server::SERVER_HTTP,
  11. 'host' => '0.0.0.0',
  12. 'port' => 9501,
  13. 'sock_type' => SWOOLE_SOCK_TCP,
  14. 'callbacks' => [
  15. Event::ON_REQUEST => [Hyperf\HttpServer\Server::class, 'onRequest'],
  16. ],
  17. ],
  18. ],
  19. 'callbacks' => [
  20. Event::ON_BEFORE_START => [Hyperf\Framework\Bootstrap\ServerStartCallback::class, 'beforeStart'],
  21. Event::ON_WORKER_START => [Hyperf\Framework\Bootstrap\WorkerStartCallback::class, 'onWorkerStart'],
  22. Event::ON_PIPE_MESSAGE => [Hyperf\Framework\Bootstrap\PipeMessageCallback::class, 'onPipeMessage'],
  23. Event::ON_WORKER_EXIT => [Hyperf\Framework\Bootstrap\WorkerExitCallback::class, 'onWorkerExit'],
  24. ],
  25. ];

分页器

因为组件 hyperf/paginator 已从 hyperf/database 依赖中移除。所以在 database 中使用到分页器的同学,还需要额外引入 hyperf/paginator 组件。

修改 DBAL 版本

倘若使用了 doctrine/dbal 组件,则需要升级到 ^3.0 版本。

移除组件 doctrine/common

doctrine/common 组件与 hyperf/utils 存在依赖冲突。故需要从 composer.json 中移除此组件。

  1. # 移除组件
  2. composer remove doctrine/common
  3. # 更新
  4. composer update "hyperf/*" -o

注意事项

  • 尽量不要将老项目的引擎修改为 Swow,如果想要使用 Swow,请尽量在新项目中尝试。因为 Swow 并不是 Swoole 的替代品,所以并不是所有 Swoole 的场景,都能在 Swow 中找到对应的替代方案。