微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cakephp 从 2.10 升级到 3.x

如何解决cakephp 从 2.10 升级到 3.x

我需要将一个项目从 2.10 升级到 3.x。

我正在使用官方迁移工具 https://book.cakephp.org/3/en/upgrade-tool.html,命令如下:

bin/cake upgrade all

尽管这做了几处更改,但最终还是会导致无法使用的安装并出现各种致命错误

我知道需要采取手动步骤,但我找不到任何地方的文档。

我的问题是:

  1. 是否有关于所需步骤的指南?

  2. 该工具实际上并未将版本更新到 3.0。这我需要做如下。这样对吗?我应该在运行迁移工具之前还是之后更新?

    $ composer 需要 cakePHP/cakePHP:^3.0

  3. 我还需要运行 bin/cake upgrade skeleton 命令吗? F.e 这将创建 /src 和 /webroot 文件。我应该先运行这个吗?

  4. 最后是否需要进行任何清理,因为该工具还保留了旧结构。

解决方法

可能没有任何 2.x 应用程序可以自动升级到可用的 3.x 应用程序,您仍然需要手动修复和迁移大部分应用程序代码和配置,升级工具真的只是一个帮手,可以帮你完成一些重复性的工作。

强烈建议您首先熟悉 CakePHP 3.x,直到您对使用它创建可靠的应用程序的能力充满信心,这将帮助您解决许多迁移过程中可能出现的问题,并将提高迁移应用程序的质量!

话虽如此:

  1. 我不知道有任何详尽的指南(这并不意味着没有),但您可以轻松找到人们写下他们的升级体验,例如 https://www.dereuromark.de/2015/06/06/cakephp-3-0-migration-notes

  2. 该工具不会更新 CakePHP 依赖项,不会。它期望您自己编写应用程序,并且您自己升级依赖项,它不可能解决升级核心时可能出现的依赖项冲突。

    理想情况下,首先或最后升级依赖项应该无关紧要,但为了安全起见,您应该在运行升级工具之后进行。

  3. 您不必必须运行 skeleton 任务,如果您知道自己在做什么,也可以手动从 3.x 应用程序框架复制文件做 - 在任何情况下,这些文件都是必需的,并且应该在所有其他任务运行后添加它们,您不希望任何任务更改这些文件的代码。请注意,skeleton 任务将覆盖您的某些文件,例如 bootstrap.phproutes.php

  4. 是的,您必须自己清理可能的残留物。

,

我目前正在处理从 2.x 迁移到 3.x 的项目。由于项目的规模和复杂性,我们的方法是逐步迁移。

第一阶段是为除模型之外的所有类添加命名空间,让它们由 composer 加载并摆脱对 ClassRegistry 的依赖。

我们目前所处的第二阶段是迁移模型层。我们通过在同一个项目中同时使用 2.x 模型和 3.x 模型来做到这一点。 https://github.com/cakephp/orm 需要 Composer 安装,与 2.x 类不冲突。过程是这样的——从2.x模型中取一个方法,将其迁移到3.x模型(表类),将使用此方法的任何代码调整为使用实体对象。这样我们同时在Model文件夹中有User类,在Model/Table文件夹中有UsersTable类。

为了能够在 FormHelper 中使用实体对象,我们创建了 Form3xHelper 类,该类扩展了 FormHelper,覆盖了 create_introspectModel 方法以支持与真正的 3.x FormHelper 相同的方法签名和使用实体对象设置表单字段。

下一阶段是将所有 FormHelper 更改从 2.x 迁移到 3.x,也可以通过调整我们的 Form3xHelper 逐步完成。

迁移模型和 FormHelper 层后,迁移控制器就不那么难了。

我差点忘了提到我们使用 ShimPlugin - https://github.com/dereuromark/cakephp-shim/tree/cake2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?