Обновление с Symfony 1.4 до Symfony 4

У нас есть приложение Symfony 1.4, и мы хотим обновить его до Symfony 4. Возможно ли это или нам нужно перепрограммировать приложение?

Мы обратились в ближайшую к нам компанию по разработке программного обеспечения, и нам сказали, что мы должны перепрограммировать приложение.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
3
0
1 279
6

Ответы 6

Посмотрите здесь: https://symfony.com/doc/current/setup/upgrade_major.html

Разница между Symfony 1 и Symfony 4 может быть слишком важной, поэтому вы можете начать новый проект и взять часть своего предыдущего кода для более красивого и чистого проекта.

Разработчик Symfony Framework здесь:

Symfony предоставляет шаги обновления между версиями. например: https://github.com/symfony/symfony/blob/2.1/UPGRADE-2.1.md

Но обновление с 1.4 до 4 БОЛЬШОЕ и потребует тонны работы. Я согласен: по моему опыту написать все приложение с нуля будет быстрее. Обновление может занять годы для стабильного результата (конечно, в зависимости от размера вашего приложения)

Обновление с 1.4 до 4 - это чудо.

Even if you can upgrade to the version 2 and then 3 untill here it's could be nice , but the version 4 is totally different , so i can advice you to rewrite your code directly instead of wasting time updgrading from version to the upper one.

Я согласен с выводом, но я не согласен с некоторыми тонкостями. Неважно, обновитесь ли вы с 1 до 2/3/4, большое изменение заключается в том, что Symfony 1 имеет совершенно другую архитектуру, и это главная проблема. Если вы обновите приложение Symfony 1 до версии 2, то обновление до Symfony 4 (или вскоре до 5) будет довольно простым.

dbrumann 13.11.2019 14:50

Symfony 1 — это совершенно другая кодовая база, использующая разные концепции как внутри фреймворка (или приложения), так и с некоторыми библиотеками. Например, он использует Propel (подход Active Record), а не Doctrine (подход Data Mapper) для сопоставления php-объектов с базой данных. Разница между Symfony 2 и Symfony 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. Есть и другие способы обойти это, но это потребует значительно больше работы.

Отказ от ответственности: я написал и поддерживаю инструмент с открытым исходным кодом для автоматической мгновенной миграции под названием Rector.

С 2018 года эти миграции стали намного проще с помощью абстрактного синтаксического дерева (AST). Эта технология позволяет изменять один шаблон в неограниченном количестве файлов со скоростью readfile/printfile.

Например. Контроллер 1000 от Symfony 1 до Symfony 5 займет столько же времени, сколько и 1 контроллер.. Все, что вам нужно сделать, это написать правила миграции. Некоторые из них готовы в Ректоре, например. Symfony 2.8 через Symfony 5 — см. Ректорские наборы на Github.


Вы можете узнать больше о миграции старых приложений Symfony

Для тех, кто все еще заинтересован в этой задаче, перенос приложения Symfony 1.x на современную Symfony 4.x и выше (включая Symfony 5.x): мы столкнулись с точно такой же задачей в нашей компании, и я нашел этот проект GitHub, в котором подробно описано, как сделать это, используя шаблон проектирования Strangler Fig и подход Legacy Route Loader, который Symfony предлагает на своем веб-сайте:

https://github.com/dkusmierek/symfony_migration_example

Я могу поручиться, что это ДЕЙСТВИТЕЛЬНО работает, хотя здесь и там есть некоторые настройки, которые вам нужно будет сделать, чтобы заставить его работать для вашей конкретной среды. Но этого должно быть достаточно, чтобы пройти 90% пути.

Другие вопросы по теме