mezzio/mezzio-migration

将 Mezzio 应用程序从 v2 迁移到 v3

1.3.0 2022-11-16 19:46 UTC

README

Build Status

🇷🇺 致俄罗斯公民

我们,Laminas 的参与者,来自不同的国家。我们中许多人既有在俄罗斯的朋友、亲戚和同事,也有在乌克兰的。我们中一些人出生在俄罗斯。我们中一些人目前居住在俄罗斯。我们中一些人祖父母曾在二战中与法西斯作战。这里没有人支持法西斯主义。

我们中有一人有一位乌克兰亲戚,她和儿子一起从家中逃出。由于前方道路轰炸,火车延误了。我们有一些朋友躲在防空洞里。我们在空袭后焦急地关注他们,空袭无差别地袭击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些。这是我们亲眼所见。

您信任我们足够,以至于使用我们的程序,我们请求您再次信任我们。我们需要您的帮助。走出家门,抗议这场无谓的战争。停止杀戮。说“不,战争!”

🇺🇸 致俄罗斯公民

我们 Laminas 的成员来自世界各地。我们中许多人既在俄罗斯也有在乌克兰的朋友、家人和同事。我们中一些人出生在俄罗斯。我们中一些人目前居住在俄罗斯。我们中一些人祖父母曾在二战中与纳粹作战。这里没有人支持法西斯主义。

一位团队成员有一位乌克兰亲戚,她和儿子一起逃离了家园。由于前方道路轰炸,火车延误了。我们有一些朋友躲在防空洞里。我们在空袭后焦急地关注他们,空袭无差别地袭击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些。这是我们亲身体验到的。

您信任我们足够,以至于使用我们的软件。我们请求您信任我们说出真相。我们需要您的帮助。走出家门,抗议这场不必要的战争。停止杀戮。说“停止战争!”

这个库提供了一个从 Mezzio v2 迁移到 v3 的工具。

安装

运行以下命令安装此库

$ composer require --dev mezzio/mezzio-migration

使用

安装工具后,使用以下命令执行它

$ ./vendor/bin/mezzio-migration migrate

克隆与 composer 安装

如果您希望克隆工具一次并多次使用,您也可以这样做。使用以下命令克隆

$ git clone https://github.com/mezzio/mezzio-migration

然后,而不是使用 ./vendor/bin/mezzio-migration migrate,请使用 /full/path/to/mezzio-migration/bin/mezzio-migration

待办事项

我们的目标是准备一个可下载的 phar 文件,可以在您的系统上安装并重复使用;这一变化将在未来的某个时间点实现。

要求

您项目中使用的所有外部包必须与 Mezzio v3 库兼容。如果您不确定,请检查它们的依赖项。

此脚本将卸载所有依赖包,然后尝试使用最新兼容版本安装它们。如果任何包不兼容,脚本将报告错误,指明需要更新的包。

以下表格显示了与版本 3 兼容的 Mezzio 包版本,以及迁移工具将更新的版本。

此工具做什么?

为了运行,此工具要求应用程序目录中包含一个composer.json文件,并且此文件可以被脚本写入。

接下来,它尝试检测当前使用的Mezzio版本。如果检测到的版本不是2.X版本,则脚本将退出而不会执行任何更改。

然后执行以下步骤:

  1. 删除vendor目录。

  2. 使用composer install安装当前依赖。

  3. 分析composer.lock以识别所有依赖于Mezzio包的包。

  4. 删除所有已安装的Mezzio包及其依赖的包。

  5. 使用composer update更新所有剩余的包。

  6. 要求安装所有之前安装的Mezzio包,如果之前未安装,则将包laminas/laminas-component-installermezzio/mezzio-tooling作为开发包添加。

  7. 要求安装所有之前安装的依赖于Mezzio的包。在外部包尚未兼容Mezzio v3及其所需库的情况下,此步骤可能会失败

  8. 更新config/pipeline.php

    1. 在文件顶部添加严格类型声明;
    2. 添加函数包装器(如版本3骨架中所做的那样);
    3. 更新以下中间件:
      • pipeRoutingMiddleware变为一个引用Mezzio\Router\Middleware\RouteMiddlewarepipe()语句。
      • pipeDispatchMiddleware变为一个引用Mezzio\Router\Middleware\DispatchMiddlewarepipe()语句。
      • Mezzio\Middleware\NotFoundHandler的引用变为Mezzio\Handler\NotFoundHandler
      • Mezzio\Middleware\ImplicitHeadMiddleware的引用变为Mezzio\Router\Middleware\ImplicitHeadMiddleware
      • Mezzio\Middleware\ImplicitOptionsMiddleware的引用变为Mezzio\Router\Middleware\ImplicitOptionsMiddleware
    4. Implicit*Middleware之后(如果这些没有管道,则在Mezzio\Router\Middleware\RouteMiddleware之后)将Mezzio\Router\Middleware\MethodNotAllowedMiddleware管道化。
  9. 更新config/routes.php

    1. 在文件顶部添加严格类型声明;
    2. 添加函数包装器(如版本3骨架中所做的那样)。
  10. 用v3骨架的最新版本替换public/index.php

  11. 如果使用了pimpleAura.Di(在config/container.php中),则更新容器配置到最新骨架版本。此外,它还执行以下操作:

    • 对于pimple:将包xtreamwayz/pimple-container-interop替换为laminas/laminas-pimple-config
    • 对于Aura.Di:将包aura/di替换为laminas/laminas-auradi-config
  12. 使用./vendor/bin/mezzio migrate:interop-middleware将http-interop中间件迁移到PSR-15中间件。

  13. 使用./vendor/bin/mezzio migrate:middleware-to-request-handler将PSR-15中间件迁移到PSR-15请求处理器。

  14. 如果可用,则运行./vendor/bin/phpcbf

迁移后应做什么?

您需要更新测试以使用PSR-15中间件而不是http-interop中间件。此步骤不会自动执行,因为它太复杂了。我们可以轻松更改导入的类,但不幸的是,测试策略和模拟策略差异很大,检测所有http-interop变体使这个问题更加困难。

请手动比较和验证所做的所有更改。有可能在某些边缘情况下,脚本将无法正确运行。这主要取决于您对原始骨架所做的修改数量。

配置驱动的管道和路由

当前脚本不会对管道和路由配置进行任何修改;这些需要手动更新。