1.1 升级指南

    1.1 版将最低的 Swoole 版本要求从 4.3+ 提升到了 4.4+,这两个版本之间有一些使用上的细节问题,Hyperf 已经在较早的版本便已适配了,对于 Hyperf 的用户而言无需理会这之间的差异,我们提升最低 Swoole 版本要求主要是为了减少我们的历史负担,而 Swoole 4.4 作为 Swoole 的 LTS(长期支持版本) 也意味着更加的稳定可靠。

    Hyperf 在启动时会进行 Swoole 版本检测,但为了更好的统一各处对 Swoole 版本的依赖约束,我们建议您将 composer.json 内对 Swoole 的依赖条件改为 "ext-swoole": ">=4.4"

    增加 SWOOLE_HOOK_FLAGS 常量

    在应用的入口文件 bin/hyperf.php 以及单测的入口文件 test/bootstrap.php 里增加一行常量定义如下:

    参考: 单测入口文件参考

    移动 config/dependencies.php 文件并调整文件结构

    移动 config/dependencies.phpconfig/autoload/dependencies.php,并去除配置文件中的第一层 dependencies,如下:

    1. <?php
    2. return [
    3. 'dependencies' => [
    4. FooInterface::class => Foo::class
    5. ],
    6. ];

    1.1 的文件结构:

    由于 1.1 版本调整了 dependencies.php 文件的位置和结构,所处我们还需要调整一下 文件,以便依赖注入容器能够正确的运行,与此同时,我们也为 config/container.php 提供了更加简便的写法,DefinitionSourceFactory 将很多默认的行为聚合了起来,您只需将 config/container.php 文件的内容更换成下面的内容即可:

    1. <?php
    2. /**
    3. * Initial a dependency injection container that implemented PSR-11 and return the container.
    4. */
    5. use Hyperf\Di\Container;
    6. use Hyperf\Di\Definition\DefinitionSourceFactory;
    7. use Hyperf\Utils\ApplicationContext;
    8. use Psr\Container\ContainerInterface;
    9. $container = new Container((new DefinitionSourceFactory(true))());
    10. throw new RuntimeException('The dependency injection container is invalid.');
    11. }

    调整 WebSocket 控制器

    由于 1.1 版本调整了 onMessageonOpen 的入参约束,所以需要手动修改其为 Swoole\WebSocket\Server,具体代码如下

    调整自定义组件的 ConfigProvider

    1.0 版本中 scan.path 在 1.1 版本中调整为 annotations.scan.path,您需要修改所有自定义组件的 ConfigProvider 类来适配此变更,如您的自定义组件不涉及到注解扫描的功能配置,则可忽略此调整,如下所示:

    class ConfigProvider
    {
    
        public function __invoke(): array
        {
            return [
                'scan' => [
                    'paths' => [
                        __DIR__,
                    ],
                ],
            ];
        }
    }
    

    1.1 的 ConfigProvider 文件结构:

    如果您在之前有使用 hyperf/translation 组件,那么您需要检查一下 config/autoload/translation.php 文件内的 locale 配置项,如为 zh-CN,则需要改为 zh_CN,在 1.1 版本,我们统一了这个配置的值。

    调整 composer.json 的依赖

    由于要升级到 1.1 版本的组件,而原来 skeleton 项目默认情况下是依赖 1.0.x 版本的组件的,所以我们需要对依赖的约束条件进行一些调整,将原来所有 Hyperf 组件的依赖 ~1.0.0 修改为 ~1.1.0,修改完后需运行 composer update 来将依赖项升级到 1.1 版本。

    必须将所有 Hyperf 依赖都升级到 1.1 版本才可用,因为 1.1 调整了组件适配的 ConfigProvider 机制。

    完成升级

    至此,1.1 升级即已完成,但由于 Hyperf 的各个底层文件都是可以通过 DI 来实现重写的,如您重写了某些本次升级调整到了的框架内部文件,您仍需再根据您的实际情况进行一定的调整。