从Zend Framework 1到2逐步迁移

时间:2012-11-16 10:04:00

标签: php zend-framework migration zend-framework2

我必须将应用程序从Zend Framework 1.12.0迁移到版本2.似乎有no migration guides yet。我已经研究过ZF2编码约定,并且我采用了依赖注入(Zend \ Di)和PHP 5.3命名空间。我的目标是将我的ZF1应用程序重构为ZF2模块。

问题:是否可以在每个步骤后至少部分工作的应用程序一步一步并且避免重大的重构步骤?如果是,那么步骤是什么?

这是我对这种逐步迁移的想法,但我不知道在每一步之后我是否最终得到了一个有效的应用程序:

  1. 首先设置ZF2 Skeleton Application
  2. Set up a new module(MyApp)并将我的ZF1应用程序的内容重新组织到MyApp模块文件夹结构中。然后设置非常基本的配置和引导,并通过从ZF2 AbstractActionController扩展它来迁移IndexController。稍后将迁移模型(Zend_Db)和视图(Zend_View)。这里的目标是让一个工作的IndexController :: indexAction没有很多依赖。
  3. 设置更多配置和引导(Routing,Translate,Locale,Cache,Db,Acl,ViewHelpers,...)。我想首先设置这些组件的ZF1版本,然后逐个迁移它们。
  4. 迁移其他控制器,并使用Zend \ Di或using the ServiceManager将依赖注入设置到控制器中。
  5. 通过使旧的phing脚本使用新的目录结构来设置自动部署。
  6. 将视图(包括帮助者)和表单迁移到ZF2。
  7. 迁移模型(从Zend_Db迁移到ZF2 Zend \ Db或Doctrine)。
  8. 逐个迁移其他ZF1组件(Translate,Locale,Cache,Acl,...)。
  9. 重构康复和长假。
  10. 但是,只有当某些ZF2组件与ZF1组件一起工作时,我才会在每个步骤后都有一个workin应用程序。我不知道是不是可以在ZF2控制器上使用ZF1视图(和查看助手)。

4 个答案:

答案 0 :(得分:8)

曾经有人在某处写过它会很容易让人感到轻松,但是我从来没有在图书馆里看到任何看起来像是远程的链接或任何东西。

现在您可以找到的唯一内容和最新信息位于文档的“概述”页面中。就是这样:

  

注意ZF2与ZF1不向后兼容,因为框架实现了PHP 5.3+的新功能,并且由于许多组件的重大改写。

我从未预料到它会向后兼容,但我认为这里的关键声明是许多组件的主要重写

几个月前我和ZF2开始了一个新项目,我只想要这个库;所以没有MVC哪个应该容易,对吧?到目前为止,这几乎是一场噩梦,因为没有什么是相同的。除了一些熟悉的类名或结构外,整个框架已经完全从头开始重写。

我喜欢的东西,经常使用的东西,如形式,缓存或会话都是完全不同的。对于我的项目,我花了很多时间没有任何好处。我认为ZF2的一个关键对象是对文档进行大修,这些文档的编写方式比前一个更差。

对于我现有的其他ZF1.x项目,除了完全重写应用程序之外,我没有看到如何管理升级。

答案 1 :(得分:8)

从Zend Framework 1迁移

  

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

在本指南中,我们将介绍以下内容:

  1. 用于命名代码的工具。
  2. 在Zend Framework 1应用程序中使用Zend Framework 2的工具。
  3. 并行运行Zend Framework 2和Zend Framework 1的策略。
  4. 使代码更易于迁移的策略,主要侧重于域逻辑和MVC层的清晰分离。
  5. 迁移MVC层的策略。
  6. 迁移域层的策略。
  7. http://framework.zend.com/manual/2.1/en/migration/overview.html

答案 2 :(得分:2)

来自Zend Framework 2 FAQ

  

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

     

绝对。 Zend Framework 2的一个重要部分是迁移层,它将允许ZF 1代码在新的ZF 2引擎上运行,该引擎将在未来推出。有了它,您将能够以受控的速度添加新的ZF 2代码并重构现有代码。

但是,此时我还没有听说过任何实际的迁移层。我们只能希望会有,但在这一点上,我有疑虑。

答案 3 :(得分:1)

过去一年,我们一直在将Zend Framework 1的大型应用程序迁移到Zend Framework 2。我们从简单的事情开始,比如命名空间,然后慢慢地进入各种库组件。最后,我们最终编辑Zend_Layout以使用Zend\FilterZend_FormZend\FilterZend\Json合作,Zend_Navigation与{{}合作这帮助我们消除了几乎所有ZF1组件,但ZF1应用程序结构除外,它包括四个类Zend\Permissions\AclZend_ApplicationZend_Config和{{1} }。最后一个难题是Zend_ControllerZend_Layout的实现,其余部分是ZF2就绪。

最近,我们创建了一个代理,用于挂钩来自ZF1的Zend\Mvc\Application和ZF2模块。这已经 非常 有帮助。我详细介绍了http://webjawns.com/2013/11/migrating-to-zf2-integrating-composer-and-doctrineormmodule/的步骤。

总结......

  • 将前缀转换为名称空间(Zend\ViewZend\Mvc\ApplicationModel_Model\等。)
  • 用ZF2对应物替换非MVC组件,包括自动加载器
  • 创建ZF2应用程序结构和挂钩以开始使用ZF2模块
  • 移动控制器和视图(仍在制定此计划)