zendframework / zend-expressive-migration
Requires
- php: ^7.1
- symfony/console: ^2.8 || ^3.0 || ^4.0 || ^5.0
Requires (Dev)
- phpunit/phpunit: ^7.0.2
- zendframework/zend-coding-standard: ~1.0.0
README
仓库于2019年12月31日废弃
此仓库已迁移至mezzio/mezzio-migration。
此库提供了一种从Expressive v2迁移到v3的工具。
安装
运行以下命令来安装此库
$ composer require --dev zendframework/zend-expressive-migration
使用方法
安装工具后,使用以下命令执行
$ ./vendor/bin/expressive-migration migrate
克隆与Composer安装
如果您希望一次性克隆工具并多次使用,可以这样做。使用以下命令克隆:
$ git clone https://github.com/zendframework/zend-expressive-migration然后,不要使用
./vendor/bin/expressive-migration migrate
,而使用/full/path/to/zend-expressive-migration/bin/expressive-migration
。
待办事项
我们的目标是准备一个可下载的phar文件,可以在您的系统上安装并重复使用;此更改将在未来日期实现。
要求
您项目中使用的外部包必须与Expressive v3库兼容。如果您不确定,请检查它们的依赖关系。
此脚本将卸载所有依赖包,然后尝试用最新兼容版本安装它们。如果任何包不兼容,脚本将报告错误,并指出需要更新的包。
以下表格显示了与版本3兼容的Expressive包版本,以及迁移工具将更新的版本。
包名 | 版本 |
---|---|
zend-auradi-config | 1.0.0 |
zend-component-installer | 2.1.0 |
zend-config-aggregator | 1.1.0 |
zend-diactoros | 1.7.1 |
zend-expressive | 3.0.0 |
zend-expressive-aurarouter | 3.0.0 |
zend-expressive-authentication | 0.4.0 |
zend-expressive-authentication-basic | 0.3.0 |
zend-expressive-authentication-oauth2 | 0.4.0 |
zend-expressive-authentication-session | 0.4.0 |
zend-expressive-authentication-zendauthentication | 0.4.0 |
zend-expressive-authorization | 0.4.0 |
zend-expressive-authorization-acl | 0.3.0 |
zend-expressive-authorization-rbac | 0.3.0 |
zend-expressive-csrf | 1.0.0 |
zend-expressive-fastroute | 3.0.0 |
zend-expressive-flash | 1.0.0 |
zend-expressive-hal | 1.0.0 |
zend-expressive-helpers | 5.0.0 |
zend-expressive-platesrenderer | 2.0.0 |
zend-expressive-router | 3.0.0 |
zend-expressive-session | 1.0.0 |
zend-expressive-session-ext | 1.0.0 |
zend-expressive-template | 2.0.0 |
zend-expressive-tooling | 1.0.0 |
zend-expressive-twigrenderer | 2.0.0 |
zend-expressive-zendrouter | 3.0.0 |
zend-expressive-zendviewrenderer | 2.0.0 |
zend-httphandlerrunner | 1.0.1 |
zend-pimple-config | 1.0.0 |
zend-problem-details | 1.0.0 |
zend-stratigility | 3.0.0 |
工具做什么?
为了运行,工具需要应用程序目录中包含一个composer.json
文件,并且此文件必须可由脚本写入。
接下来,它尝试检测当前使用的Expressive版本。如果检测到的版本不是2.X版本,脚本将退出而不会进行任何更改。
然后执行以下步骤
-
删除
vendor
目录。 -
使用
composer install
安装当前依赖。 -
分析
composer.lock
以识别所有依赖于Expressive包的包。 -
删除所有已安装的Expressive包及其依赖包。
-
使用
composer update
更新所有剩余的包。 -
需要所有之前安装的Expressive包,如果之前未安装,则添加包
zendframework/zend-component-installer
和zendframework/zend-expressive-tooling
作为开发包。 -
需要所有之前安装的、依赖于Expressive的包。此步骤可能失败,在外部包尚未兼容Expressive v3及其所需库的情况下。
-
更新
config/pipeline.php
- 在文件顶部添加严格类型声明;
- 添加函数包装器(如版本3骨架中所示);
- 更新以下中间件
pipeRoutingMiddleware
变为引用Zend\Expressive\Router\Middleware\RouteMiddleware
的pipe()
语句。pipeDispatchMiddleware
变为引用Zend\Expressive\Router\Middleware\DispatchMiddleware
的pipe()
语句。Zend\Expressive\Middleware\NotFoundHandler
的引用变为Zend\Expressive\Handler\NotFoundHandler
。Zend\Expressive\Middleware\ImplicitHeadMiddleware
的引用变为Zend\Expressive\Router\Middleware\ImplicitHeadMiddleware
。Zend\Expressive\Middleware\ImplicitOptionsMiddleware
的引用变为Zend\Expressive\Router\Middleware\ImplicitOptionsMiddleware
。
- 在
Implicit*Middleware
之后(或如果这些未管道化,则在Zend\Expressive\Router\Middleware\RouteMiddleware
之后)管道化Zend\Expressive\Router\Middleware\MethodNotAllowedMiddleware
。
-
更新
config/routes.php
- 在文件顶部添加严格类型声明;
- 添加函数包装器(如版本3骨架中所示)。
-
将
public/index.php
替换为v3骨架的最新版本。 -
如果使用过
pimple
或Aura.Di
,则更新容器配置(config/container.php
)为最新骨架版本。此外,它还执行以下操作- 对于
pimple
:将包xtreamwayz/pimple-container-interop
替换为zendframework/zend-pimple-config
。 - 对于
Aura.Di
:将包aura/di
替换为zendframework/zend-auradi-config
。
- 对于
-
使用
./vendor/bin/expressive migrate:interop-middleware
将http-interop中间件迁移到PSR-15中间件。 -
使用
./vendor/bin/expressive migrate:middleware-to-request-handler
将PSR-15中间件迁移到PSR-15请求处理器。 -
如果可用,运行
./vendor/bin/phpcbf
。
迁移后您应该做什么?
您需要更新测试以使用PSR-15中间件而不是http-interop中间件。此步骤不会自动执行,因为它太复杂了。我们可以轻松更改导入的类,但不幸的是,测试策略和模拟策略差异很大,检测所有http-interop变体使得这个问题更加困难。
请手动比较和验证所有更改。在边缘情况下,脚本可能无法正确运行。这主要取决于您对原始骨架所做的修改数量。
配置驱动的管道和路由
脚本当前不会对管道和路由配置进行任何修改;这些需要手动更新。