zendframework/zend-expressive-migration

此包已被废弃,不再维护。作者建议使用mezzio/mezzio-migration包代替。

将Expressive应用从v2迁移到v3

0.1.4 2019-11-22 16:59 UTC

This package is auto-updated.

Last update: 2020-01-20 17:51:58 UTC


README

仓库于2019年12月31日废弃

此仓库已迁移至mezzio/mezzio-migration

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

然后,不要使用./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版本,脚本将退出而不会进行任何更改。

然后执行以下步骤

  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. public/index.php替换为v3骨架的最新版本。

  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变体使得这个问题更加困难。

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

配置驱动的管道和路由

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