在Symfony2项目中同时使用Doctrine1和Doctrine2的最佳方法是什么?

时间:2013-10-10 17:00:26

标签: symfony doctrine-orm symfony1 doctrine-1.2

我们正在考虑将一个大项目从symfony1.4迁移到Symfony2。

这个应用程序在功能上经过严格的Selenium测试(单元测试几乎不存在 - Doctrine1 / symfony1没有邀请我们做太多的事情),我们希望以透明的方式逐步重新实现我们在Symfony2中的功能,以便我们可以继续运行这些功能测试来验证我们在这个过程中没有破坏任何东西。

我们一直在寻找可能已经走过相同道路的人们的文章,以获得关于最佳方法的想法,但有一部分我们看不到任何建议或反馈,这很容易,可能,我们怎样才能进行渐进式重新实现我们的模型层,特定的。

我的问题是,有没有人曾经在Symfony2项目中使用Doctrine1与Doctrine2并行?我们可以通过哪些方式实现这一目标以及我们应该期待哪些问题?


对于添加的上下文,下面是我们如何计算我们可以处理从symfony1.4到Symfony2的应用程序的渐进式重新实现的所有其他问题。

对于控制器,我们可以使用Stefan Koopmanschap here和相关Bundle描述的方法,使未实现的路由回退到symfony1项目。 Maurits van der Schee也improved over it,对如何在两个应用程序之间共享身份验证和安全性采取了良好的方法。

对于视图,我们希望能够使用符号链接在项目之间共享“web /”资产,我们将开始将它们从sf1复制到Sf2并使用{{3} }作为临时模板引擎。

对于模型,我们可以让Doctrine2从原始的sf1数据库生成样板,但是将Doctrine1类中的模型中的所有业务逻辑重新实现为Doctrine2类的过程预计会很艰难,因此我们更倾向于以渐进的方式进行,有时Sf2使用Doctrine1代码(如果尚未重新实现)并使用等效的Doctrine2(如果已经重新实现)。我们并不是绝对需要这个是自动的(这很好,但不确定它是否可行),Controller或其他Model类可以决定在每种情况下使用Doctrine1或Doctrine2。这是可以实现的吗?怎么样?我们忘了什么?什么是复杂的,什么是容易的?

1 个答案:

答案 0 :(得分:0)

我一直在使用Symfony 1.4和Symfony2。 Symfony 1.4和Symfony2 - 和Doctrine 1& 2 - 只是不能一起工作。

我们的解决方案是在Symfony 1.4中创建访问单独Web应用程序的插件 - 一个新的Symfony2 Web应用程序,最终将取代Symfony 1.4 Web应用程序。

在Symfony2中创建一个API,该API公开来自Symfony 1.4应用程序访问的同一数据库中的数据。

例如,假设您的Symfony 1.4应用程序具有以下路径:

  • /home
  • /orders
  • /sales

在Symfony 1.4应用程序中,删除/sales的控制器和路由。您的目标是将/sales路由移至Symfony2。您希望模块化地执行此操作 - 一次更换一个(每条路径)。

创建一个Symfony 1.4插件,用于访问您在Symfony2中创建的新应用程序 - Symfony2应用程序现在处理/sales路由。 Symfony 1.4现在从您创建的Symfony2 API获取它的信息。

Symfony1.4中仍然存在

/ home和/ orders,但您已将/销售转移到Symfony2。

逐个添加Symfony2应用程序的功能。随时删除Symfony 1.4中的路由。

我希望这会有所帮助。我不确定我解释得很清楚。我很乐意回答任何问题。