逐步迁移Zend Framework 1到2

26
我需要将一个应用程序从Zend Framework 1.12.0迁移到2版本。目前似乎还没有迁移指南。我已经学习了ZF2编码规范,并采用了依赖注入(Zend\Di)和PHP 5.3名称空间。我的目标是将我的ZF1应用程序重构为ZF2模块。
问题:是否可以分步进行,每一步都至少有部分工作的应用程序,并且避免大规模的重构步骤?如果可以,那么具体步骤是什么?
以下是我关于这种分步迁移的想法,但我不知道每一步之后是否会得到一个工作的应用程序:
  1. 首先设置ZF2骨架应用程序
  2. 设置一个新模块(MyApp),并将我的ZF1应用程序的内容重新组织到MyApp模块文件夹结构中。然后设置非常基本的配置和引导,并通过扩展它从ZF2 AbstractActionController迁移IndexController。模型(Zend_Db)和视图(Zend_View)稍后将被迁移。这里的目标是拥有一个工作的IndexController :: indexAction,它没有太多的依赖关系。
  3. 设置更多的配置和引导(路由,翻译,区域设置,缓存,数据库,Acl,ViewHelpers等)。我想首先设置这些组件的ZF1版本,然后逐个迁移它们。
  4. 迁移其他控制器,并使用Zend\Di或使用ServiceManager将依赖项注入到控制器中。
  5. 通过使旧的phing脚本与新的目录结构相匹配来设置自动部署。
  6. 将视图(包括助手)和表单迁移到ZF2。
  7. 将模型(从Zend_Db迁移到ZF2 Zend\Db或Doctrine)迁移到ZF2。
  8. 逐个迁移其他ZF1组件(翻译,区域设置,缓存,Acl等)。
  9. 重构康复和长假。
然而,只有当某些ZF2组件与ZF1组件配合使用时,每一步完成后才会有一个可用的应用程序。我不知道是否可以例如使用ZF1视图(和视图助手)与ZF2控制器。

实际上,您可以并排使用ZF1和ZF2,因此可以采取较小的步骤。最大的问题是重新组织您自己的项目。我认为,ZF1应用程序通常不止一个模块。您对此有很好的理解,起点也很好。迁移是一件棘手的事情,通常会导致重构几乎所有内容:P - Sam
2
把ZF2看作是一个全新的框架,你想要迁移到它。我敢打赌你需要重写整个应用程序... - shadyyx
不要认为你会找到迁移指南。我认为你将不得不为ZF2重写你的应用程序。 - Andreas
1
不确定您是否已经找到了,但是这里有一个解释如何并行运行ZF1和ZF2应用程序的说明,以及逐步从ZF1迁移到ZF2的基本说明:http://framework.zend.com/manual/2.1/en/migration/zf1_zf2_parallel.html - petronic
现在有一本关于从ZF1迁移到ZF2的书籍:https://www.phparch.com/books/zend-framework-migration-guide/ - aimfeld
4个回答

8
有人曾经写过,通过一些中间层将其变得轻而易举,但我从未看到过任何链接或者库中的内容与此相似。现在唯一能找到的最新信息是在文档的概述页面中。它是这样说的:
注意,ZF2不向后兼容ZF1,因为该框架实现了PHP 5.3+的新特性,并对许多组件进行了重大重写。
我从未期望它向后兼容,但我认为这里的关键声明是许多组件的重大重写。
几个月前,我开始了一个只使用库的ZF2新项目,所以没有MVC,应该很容易,对吧?到目前为止,这几乎成了噩梦,因为没有什么东西还像以前一样。除了一些熟悉的类名或结构之外,整个框架完全从头开始重写。
我喜欢、经常使用和熟记于心的东西,如表单、缓存或会话等,都是完全不同的。对于我的项目来说,这浪费了我很多时间,没有任何好处。我认为Zf2的主要目标之一是彻底改进文档,但截至目前,文档比以前更差。
对于我其他现有的ZF1.x项目,我不知道如何进行升级,除了完全重写应用程序。

ZF2的主要优点是其模块化。您不必像在ZF1中那样重写所有内容。最初的目标是提供一个中间层来迁移ZF1和ZF2之间,但目前情况并非如此,而且坦率地说,我怀疑是否会有这种情况。 - Sam
1
@Sam 不知道你为什么认为ZF1不是模块化的;它作为一个库必须是模块化的。在ZF1中,我很少不得不重写任何东西。而且OP的问题与ZF2 vs ZF1无关。 - Adrian World
我只是在评论你的帖子,没有把它变成ZF1与zf2的辩论 :) 而且当我谈到模块化时,我指的是ZF1应用程序 - 它们不是模块化的。但框架本身在很大程度上是模块化的 ;) - Sam

8

从Zend Framework 1迁移

本指南旨在提供从Zend Framework 1迁移到Zend Framework 2的工具和策略。没有适用于每个项目的单一解决方案,也没有自动化该过程的工具。

在本指南中,我们将涵盖以下内容:

  1. 用于命名空间代码的工具。
  2. 将Zend Framework 2用于Zend Framework 1应用程序的工具。
  3. 同时运行Zend Framework 2和Zend Framework 1的策略。
  4. 使您的代码更易于迁移的策略,重点是清晰地分离您的领域逻辑和MVC层。
  5. 迁移MVC层的策略。
  6. 迁移您的领域层的策略。

http://framework.zend.com/manual/2.1/en/migration/overview.html


我自己还没有做过(但至少它是来自官方来源的)。如果我成功完成了,我会更新这个内容。 - electblake

2
Zend Framework 2 FAQ中:

我有一个使用Zend Framework 1构建的应用程序 - 我能将其迁移到新版本吗?

当然可以。Zend Framework 2的一个重要部分是迁移层,它将允许ZF 1代码在新的ZF 2引擎上运行,并将在未来提供。通过它,您将能够以受控的速度添加新的ZF 2代码并重构现有代码。

但是,目前为止,我还没有听说过任何实际的迁移层。我们只能希望会有,但目前我对此表示怀疑。


2
在过去的一年中,我们一直在将一个大型应用程序从Zend Framework 1迁移到Zend Framework 2。 我们从简单的事情开始,例如命名空间,并逐渐进入各种库组件。 最终,我们编辑了Zend_Layout以与Zend\FilterZend_Form以与Zend\FilterZend\JsonZend_Navigation以与Zend\Permissions\Acl等配合使用。 这帮助我们消除了几乎所有ZF1组件,但仍保留着ZF1应用程序结构,其中包括四个类Zend_ApplicationZend_ConfigZend_ControllerZend_Layout。 最后一块拼图是实现Zend\Mvc\ApplicationZend\View,其余部分都已经准备好使用ZF2。

最近,我们创建了一个代理来连接到Zend\Mvc\Application和ZF2模块。 这非常有帮助。 我在http://webjawns.com/2013/11/migrating-to-zf2-integrating-composer-and-doctrineormmodule/详细介绍了步骤。

总之...

  • 将前缀转换为命名空间(Model_变成Model\Application_Controller变成Application\Controller等)
  • 用ZF2替换非MVC组件,包括自动加载程序
  • 创建ZF2应用程序结构和挂钩以开始使用ZF2模块
  • 移动控制器和视图(仍在制定计划)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接