mezzio / mezzio-migration
将 Mezzio 应用程序从 v2 迁移到 v3
Requires
- php: ~8.0.0 || ~8.1.0 || ~8.2.0
- ext-json: *
- symfony/console: ^2.8 || ^3.0 || ^4.0 || ^5.0 || ^6.0
Requires (Dev)
- laminas/laminas-coding-standard: ~2.4.0
- phpunit/phpunit: ^9.5.26
- psalm/plugin-phpunit: ^0.18.0
- vimeo/psalm: ^4.29.0
Conflicts
This package is auto-updated.
Last update: 2024-09-06 08:43:54 UTC
README
🇷🇺 致俄罗斯公民
我们,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版本,则脚本将退出而不会执行任何更改。
然后执行以下步骤:
-
删除
vendor
目录。 -
使用
composer install
安装当前依赖。 -
分析
composer.lock
以识别所有依赖于Mezzio包的包。 -
删除所有已安装的Mezzio包及其依赖的包。
-
使用
composer update
更新所有剩余的包。 -
要求安装所有之前安装的Mezzio包,如果之前未安装,则将包
laminas/laminas-component-installer
和mezzio/mezzio-tooling
作为开发包添加。 -
要求安装所有之前安装的依赖于Mezzio的包。在外部包尚未兼容Mezzio v3及其所需库的情况下,此步骤可能会失败。
-
更新
config/pipeline.php
- 在文件顶部添加严格类型声明;
- 添加函数包装器(如版本3骨架中所做的那样);
- 更新以下中间件:
pipeRoutingMiddleware
变为一个引用Mezzio\Router\Middleware\RouteMiddleware
的pipe()
语句。pipeDispatchMiddleware
变为一个引用Mezzio\Router\Middleware\DispatchMiddleware
的pipe()
语句。Mezzio\Middleware\NotFoundHandler
的引用变为Mezzio\Handler\NotFoundHandler
。Mezzio\Middleware\ImplicitHeadMiddleware
的引用变为Mezzio\Router\Middleware\ImplicitHeadMiddleware
。Mezzio\Middleware\ImplicitOptionsMiddleware
的引用变为Mezzio\Router\Middleware\ImplicitOptionsMiddleware
。
- 在
Implicit*Middleware
之后(如果这些没有管道,则在Mezzio\Router\Middleware\RouteMiddleware
之后)将Mezzio\Router\Middleware\MethodNotAllowedMiddleware
管道化。
-
更新
config/routes.php
- 在文件顶部添加严格类型声明;
- 添加函数包装器(如版本3骨架中所做的那样)。
-
用v3骨架的最新版本替换
public/index.php
。 -
如果使用了
pimple
或Aura.Di
(在config/container.php
中),则更新容器配置到最新骨架版本。此外,它还执行以下操作:- 对于
pimple
:将包xtreamwayz/pimple-container-interop
替换为laminas/laminas-pimple-config
。 - 对于
Aura.Di
:将包aura/di
替换为laminas/laminas-auradi-config
。
- 对于
-
使用
./vendor/bin/mezzio migrate:interop-middleware
将http-interop中间件迁移到PSR-15中间件。 -
使用
./vendor/bin/mezzio migrate:middleware-to-request-handler
将PSR-15中间件迁移到PSR-15请求处理器。 -
如果可用,则运行
./vendor/bin/phpcbf
。
迁移后应做什么?
您需要更新测试以使用PSR-15中间件而不是http-interop中间件。此步骤不会自动执行,因为它太复杂了。我们可以轻松更改导入的类,但不幸的是,测试策略和模拟策略差异很大,检测所有http-interop变体使这个问题更加困难。
请手动比较和验证所做的所有更改。有可能在某些边缘情况下,脚本将无法正确运行。这主要取决于您对原始骨架所做的修改数量。
配置驱动的管道和路由
当前脚本不会对管道和路由配置进行任何修改;这些需要手动更新。