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变体使得这个问题更加困难。
请手动比较和验证所有更改。在边缘情况下,脚本可能无法正确运行。这主要取决于您对原始骨架所做的修改数量。
配置驱动的管道和路由
脚本当前不会对管道和路由配置进行任何修改;这些需要手动更新。