【问题标题】:Upgrading from Symfony 1.4 to Symfony 4从 Symfony 1.4 升级到 Symfony 4
【发布时间】:2019-03-25 08:26:31
【问题描述】:

我们有一个 Symfony 1.4 应用程序并且想要升级到 Symfony 4。是否可以或者我们必须重新编程应用程序?

我们询问了附近的一家软件公司,他们告诉我们必须重新编程应用程序。

【问题讨论】:

    标签: symfony


    【解决方案1】:

    Symfony 1 是一个完全不同的代码库,在框架(或应用程序)内部和一些库中使用了不同的概念。例如,它使用 Propel(Active Record-approach)而不是 Doctrine(Data Mapper-approach)将 php-objects 映射到数据库。 Symfony 2 到 4 之间的差异要小得多,因为它们共享相同的底层代码库,因此彼此更接近。由于弃用(更改和删除部分代码),升级仍然需要大量工作,但总体而言,升级过程可以在同一个应用程序中完成。除此之外,您可以选择可用的最新版本,我认为,如果您现在/即将开始,即使是 Symfony 5 测试版也是一个不错的选择。

    基本上,如果你想升级 Symfony 1,你将迁移到一个新系统,如果你迁移到 Zend Framework 3/Laminas 与 Symfony 4 并没有太大区别。至少你可以直接“从 Symfony 1 升级到 4,而不是从超过 2/3 的版本逐步升级。不过,这将需要大量的手工工作。本质上,您是在不同的应用程序之间迁移。 Symfony 文档对如何启动迁移项目有一些一般性建议:https://symfony.com/doc/current/migration

    基本上,该方法是在旧应用程序(通常称为扼杀应用程序的概念)周围包装一个新应用程序,然后将功能转移到新应用程序,例如路由路由,并在新功能尚不存在时回退到旧应用程序。选择较旧版本的 Symfony(比如 3.4)的主要原因是对所使用的共享 PHP 版本的限制。还有其他方法可以解决它,但这意味着更多的工作。

    【讨论】:

      【解决方案2】:

      这里是 Symfony 框架开发者:

      Symfony 确实提供版本之间的升级步骤。例如: https://github.com/symfony/symfony/blob/2.1/UPGRADE-2.1.md

      但是从 1.4 升级到 4 是一项艰巨的任务,需要大量工作。 我同意:根据我的经验,从头开始编写整个应用程序会更快。 升级可能需要数年才能获得稳定的结果(当然取决于您的应用程序大小)

      【讨论】:

        【解决方案3】:

        对于仍然对此任务感兴趣的任何人,将 Symfony 1.x 应用程序迁移到现代 Symfony 4.x 及更高版本(包括 Symfony 5.x),我们公司面临完全相同的任务,我发现了这个 GitHub 项目详细说明了如何使用 Strangler Fig 设计模式和 Symfony 在其网站上建议的 Legacy Route Loader 方法:

        https://github.com/dkusmierek/symfony_migration_example

        我可以保证这确实有效,尽管您需要在这里和那里进行一些调整以使其适用于您的特定环境。但这应该足以让您完成 90% 的路程。

        【讨论】:

          【解决方案4】:

          看看这里: https://symfony.com/doc/current/setup/upgrade_major.html

          Symfony 1 和 4 之间的区别可能非常重要,因此您可能会考虑开始一个新项目并使用您以前的一些代码来创建一个更好、更清洁的项目。

          【讨论】:

            【解决方案5】:

            从 1.4 升级到 4 是一个奇迹。

            即使您可以升级到第 2 版和第 3 版,直到这里 可能很好,但版本4完全不同,所以我可以 建议您直接重写代码而不是浪费时间 从版本升级到上一个版本。

            【讨论】:

            • 我同意这个观点,但我不同意一些更精细的观点。如果你从 1 升级到 2/3/4 没关系,最大的变化是 Symfony 1 有一个完全不同的架构,这是主要问题。如果您将 Symfony 1 应用程序升级到版本 2,那么从那里升级到 Symfony 4(或很快 5)将非常简单。
            【解决方案6】:

            免责声明:我编写并维护了一个名为 Rector 的用于处理自动即时迁移的开源工具。

            自 2018 年以来,借助抽象语法树 (AST),这些迁移变得更加容易。该技术允许以读取文件/打印文件的速度在无限数量的文件中更改一种模式。

            例如从 Symfony 1 到 Symfony 5 的 1000 个控制器将花费与 1 个控制器相似的时间。您需要做的就是编写迁移规则。其中一些已经在 Rector 中准备好了,例如Symfony 2.8 通过 Symfony 5 - see Rector sets on Github


            您可以了解有关旧 Symfony 应用程序迁移的更多信息

            【讨论】:

              猜你喜欢
              • 2022-01-10
              • 1970-01-01
              • 1970-01-01
              • 2017-03-22
              • 1970-01-01
              • 2022-12-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多