2012-11-16 107 views
25

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

问题:是否有可能进行一步一步与至少部分运行的应用程序的每一步避免巨大的重构步骤?如果是,那么步骤是什么?

这里是我这样的一步一步迁移的想法,但如果我最终每个步骤之后,运行的应用程序,我不知道:

  1. 开始通过设置ZF2 Skeleton Application
  2. Set up a new module(MyApp)并将我的ZF1应用程序的内容重新组织到MyApp模块文件夹结构中。然后设置非常基本的配置和引导,并通过从ZF2 AbstractActionController扩展它来迁移IndexController。模型(Zend_Db)和视图(Zend_View)将在稍后进行迁移。这里的目标是有一个工作的IndexController :: indexAction,它没有很多的依赖关系。
  3. 设置更多配置和引导(路由,翻译,语言环境,缓存,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. 重构康复和长假。

但是,只有当某些ZF2组件与ZF1组件一起工作时,每一步之后我都会有一个workin应用程序。我不知道它是否是例如使用ZF2控制器可以使用ZF1视图(和视图助手)。

+0

您实际上可以将ZF1和ZF2并排工作,因此可以使用更小的步骤。最大的问题是重新组织你自己的项目。我认为一个ZF1 App USUALLY不止是一个模块。你几乎对你有一个很好的理解,你的出发点是好的。迁移是一件棘手的事情,通常最终会重构几乎所有的东西:P – Sam

+2

将ZF2视为您想要迁移到的全新新框架。我敢打赌,你需要重写整个你的应用程序... – shadyyx

+0

不要以为你会找到一个移民指南。我认为你将不得不重写你的ZF2应用程序 – Andreas

回答

8

迁移从Zend框架1

本指南旨在为从Zend框架1迁移到Zend框架提供的工具和策略2,没有单一的解决方案,将每个项目的工作,也任何工具来自动化过程。

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

  1. 工具命名空间代码。
  2. 在您的Zend Framework 1应用程序中使用Zend Framework 2的工具。
  3. 平行运行Zend Framework 2和Zend Framework 1的策略。
  4. 使您的代码更易于迁移的策略,主要侧重于干净分离您的域逻辑和MVC层。
  5. 迁移MVC图层的策略。
  6. 策略迁移您的域图层。

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

+0

我自己还没有做过(但),但至少它是从官方来源。如果我完成了(成功),我会更新它。 – electblake

7

某处有人写一次,这将是易peasy一些中间层,但我从来没有见过的,看上去只是远程喜欢它的库中的任何链接或任何东西。

现在您可以在文档的Overview页面找到唯一的和最新的信息。它是这样的:

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

我从未想到它是向后兼容的,但这里的关键语句,我相信是主要重写许多部件

几个月前,我已经开始使用ZF2开发一个新项目,在那里我只需要图书馆;所以没有MVC这应该很容易,对吧?到目前为止,这几乎是一场噩梦,因为现在什么都没有了。除了一些熟悉的类名或结构之外,整个框架已经完全从头改写。

我喜欢的东西,用过很多东西,并且像形式,缓存或会话一样,都是完全不同的。对于我的项目来说,花费我很多时间,没有任何好处。我认为ZF2的一个关键对象是彻底改变了这些写作方式比以前更糟糕的文档。

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

+0

ZF2的主要优势在于它的模块化。您不必像ZF1那样重写所有内容。最初的目标是提供ZF1和ZF2之间的中间层,但目前情况并非如此,坦率地说,我怀疑将会出现这种情况。 – Sam

+0

@Sam不知道你为什么认为ZF1不是模块化的;这是一个图书馆,因此它必须是模块化的。我很少需要在ZF1中重写任何内容。 OP的问题不在于ZF2与ZF1 –

+0

我在评论你的帖子,我没有把它作为ZF1与zf2的辩论:)而对于模块化的我讨论的是zf1-应用 - 那些不是模块化的。框架本身是很高的程度;) – Sam

1

Zend Framework 2 FAQ

我与Zend框架1构建的应用程序 - 我将能够将其迁移到新版本?

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

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

1

我们已经在过去一年中从Zend框架1的大型应用程序迁移到Zend框架2。我们从简单的东西开始,比如命名空间,然后慢慢地进入各种库组件。最终,我们最终编辑Zend_LayoutZend\Filter,Zend_Form一起工作,与Zend\FilterZend\Json,Zend_Navigation一起使用,与Zend\Permissions\Acl等一起工作等。这有助于我们消除几乎所有ZF1组件,但ZF1应用结构除外,其中包括四个类Zend_ApplicationZend_Config,Zend_ControllerZend_Layout。拼图的最后一部分是Zend\Mvc\ApplicationZend\View的执行,其余部分是ZF2就绪。

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

总之...

  • 转换前缀命名空间(Model_Model\Application_ControllerApplication\Controller等)
  • 与ZF2同行,包括自动加载磁带机更换非MVC组件
  • 创建ZF2应用结构和挂钩开始使用ZF2模块
  • 移动控制器和视图(仍在制定此计划)