webimpress/zend-expressive-migration

此包已废弃,不再维护。作者建议使用zendframework/zend-expressive-migration包。

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

0.1.0 2018-03-14 22:10 UTC

README

Build Status Coverage Status

此库提供从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版本,则脚本将退出而不进行任何更改。

然后,它执行以下步骤

  1. 删除vendor目录。

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

  3. 分析composer.lock以确定所有依赖于Expressive包的包。

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

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

  6. 需要所有之前安装的Expressive包,如果之前没有安装,请添加开发包 zendframework/zend-component-installerzendframework/zend-expressive-tooling

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

  8. 更新 config/pipeline.php

    1. 在文件顶部添加严格的类型声明;
    2. 添加一个函数包装器(就像在版本3骨架中做的那样);
    3. 更新以下中间件
      • pipeRoutingMiddleware 变成引用 Zend\Expressive\Router\Middleware\RouteMiddlewarepipe() 语句。
      • pipeDispatchMiddleware 变成引用 Zend\Expressive\Router\Middleware\DispatchMiddlewarepipe() 语句,
      • 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,
    4. Implicit*Middleware 之后(或者如果没有管道,在 Zend\Expressive\Router\Middleware\RouteMiddleware 之后)添加 Zend\Expressive\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 替换为 zendframework/zend-pimple-config
    • 对于 Aura.Di:将包 aura/di 替换为 zendframework/zend-auradi-config
  12. 使用 ./vendor/bin/expressive migrate:interop-middleware 将 http-interop 中间件迁移到 PSR-15 中间件。

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

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

迁移后应该做什么?

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

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

配置驱动的管道和路由

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