2

我们正在考虑将一个我们积极维护的大型项目从 symfony1.4 迁移到 Symfony2。

这个应用程序使用 Selenium 在功能上进行了大量测试(单元测试几乎不存在 - Doctrine1/symfony1 并没有邀请我们做这些),我们希望以透明的方式逐步重新实现 Symfony2 中的功能,以便我们可以保持运行这些功能测试来验证我们没有破坏过程中的任何东西。

我们一直在寻找之前可能走同样道路的人的文章,以寻找关于最佳方法的想法,但有一部分我们没有看到任何建议或反馈,无论它是否容易、可能以及我们如何逐步重新实现我们的模型层,具体来说。

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


为了增加上下文,下面是我们如何处理从 symfony1.4 到 Symfony2 渐进式重新实现应用程序的所有其他问题。

对于Controller,我们可以使用 Stefan Koopmanschap在这里描述的方法和相关的 Bundle 让未实现的路由透明地回退到 symfony1 项目。Maurits van der Schee 也对其进行了改进,提供了一种在两个应用程序之间共享身份验证和安全性的好方法。

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

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

4

1 回答 1

0

我在 Symfony 1.4 和 Symfony2 中遇到过这种情况。Symfony 1.4 和 Symfony2——以及 Doctrine 1 和 2——不能一起工作。

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

在 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 获取它的信息。

/home 和 /orders 在 Symfony1.4 中仍然存在,但您已将 /sales 移至 Symfony2。

一点一点地为 Symfony2 应用程序添加功能。随时从 Symfony 1.4 中删除路由。

我希望这有帮助。我不确定我是否解释得很好。我很乐意回答任何问题。

于 2013-12-04T07:15:18.940 回答