webimpress / zend-expressive-migration
Requires
- php: ^7.1
- symfony/console: ^2.8 || ^3.0 || ^4.0
Requires (Dev)
- phpunit/phpunit: ^7.0.2
- zendframework/zend-coding-standard: ~1.0.0
- zendframework/zend-expressive: ^3.0.0rc4
This package is auto-updated.
Last update: 2019-09-02 19:24:27 UTC
README
此库提供从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然后,您可以使用
/full/path/to/zend-expressive-migration/bin/expressive-migration
而不是使用./vendor/bin/expressive-migration migrate
。
待办事项
我们的目标是准备一个可下载的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 | 1.0.0 |
zend-expressive-authentication-basic | 1.0.0 |
zend-expressive-authentication-oauth2 | 1.0.0 |
zend-expressive-authentication-session | 1.0.0 |
zend-expressive-authentication-zendauthentication | 1.0.0 |
zend-expressive-authorization | 1.0.0 |
zend-expressive-authorization-acl | 1.0.0 |
zend-expressive-authorization-rbac | 1.0.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骨架中做的那样)。
-
用v3骨架的最新版本替换
public/index.php
。 -
如果使用过
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变体使这个问题更加困难。
请手动比较和验证所有更改。在边缘情况下,脚本可能无法正确运行。这主要取决于您对原始骨架所做的修改数量。
配置驱动的管道和路由
当前脚本不会修改管道和路由配置;这些需要手动更新。