Пошаговая миграция с Zend Framework 1 на 2

Мне нужно перенести приложение из Zend Framework 1.12.0 в версию 2. Похоже, что руководства по миграции пока нет. Я уже изучил соглашения о кодировании ZF2 и применил внедрение зависимостей (Zend\Di) и пространства имен PHP 5.3. Моя цель состоит в том, чтобы преобразовать мое приложение ZF1 в модуль ZF2.

Вопрос: Можно ли после каждого шага постепенно переходить с хотя бы частично работающим приложением и избегать огромных шагов рефакторинга? Если да, каковы шаги?

Вот моя идея такой поэтапной миграции, но я не знаю, получу ли я работающее приложение после каждого шага:

  1. Начните с настройки скелетного приложения ZF2
  2. Установите новый модуль (MyApp) и реорганизуйте содержимое моего приложения ZF1 в структуру папок модуля MyApp. Затем настройте базовую конфигурацию, загрузите и перенесите IndexController, расширив его из ZF2 AbstractActionController. Модели (Zend_Db) и представления (Zend_View) будут перенесены позже. Целью здесь является создание работающего IndexController::indexAction, который не имеет много зависимостей.
  3. Установите дополнительные настройки и загрузку (Маршрутизация, Перевод, Локаль, Кэш, БД, Acl, ViewHelpers, ...). Я хотел бы сначала установить версии этих компонентов для ZF1, а затем перенести их одну за другой.
  4. Перенесите другие контроллеры и настройте внедрение зависимостей в контроллеры либо с помощью Zend \ Di, либо с помощью ServiceManager.
  5. Настройте автоматическое развертывание, заставив старые скрипты phing работать с новой структурой каталогов.
  6. Перенесите представления (включая помощников) и формы в ZF2.
  7. Перенесите модели (из Zend_Db в ZF2 Zend\Db или в Doctrine).
  8. Миграция других компонентов ZF1 по одному (Translate, Locale, Cache, Acl, ...).
  9. Реабилитация реабилитации и длительный отпуск.

Однако после каждого шага у меня будет рабочее приложение, только если определенные компоненты ZF2 работают вместе с компонентами ZF1. Я понятия не имею, возможно ли, например, использовать представления ZF1 (и помощники представления) с контроллерами ZF2.

4 ответа

Решение

Миграция из Zend Framework 1

Это руководство предназначено для предоставления инструментов и стратегий для перехода с Zend Framework 1 на Zend Framework 2. Не существует единого решения, которое будет работать для каждого проекта, ни инструментов для автоматизации процесса.

В этом руководстве мы рассмотрим следующее:

  1. Инструменты для пространства имен вашего кода.
  2. Инструменты для использования Zend Framework 2 в вашем приложении Zend Framework 1.
  3. Стратегии параллельного запуска Zend Framework 2 и Zend Framework 1.
  4. Стратегии для облегчения переноса вашего кода, ориентируясь в первую очередь на четкое разделение логики вашего домена и уровня MVC.
  5. Стратегии миграции слоя MVC.
  6. Стратегии миграции вашего доменного уровня.

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

Где-то когда-то было написано, что это будет легко с некоторым промежуточным слоем, но я никогда не видел никаких ссылок или чего-либо еще в библиотеке, которая выглядела бы так же отдаленно.

Теперь единственная и последняя информация, которую вы можете найти, находится на странице обзора документации. Вот это:

Примечание. ZF2 не имеет обратной совместимости с ZF1 из-за новых функций в PHP 5.3+, реализованных платформой, а также из-за серьезных переписываний многих компонентов.

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

Я начал новый проект с ZF2 несколько месяцев назад, где я хотел только библиотеку; так что нет MVC, что должно быть легко, верно? Пока что это был настоящий кошмар, потому что больше ничего не осталось. Помимо некоторых знакомых имен классов или структур, вся структура была полностью переписана с нуля.

Вещи, которые я любил, много использовал и знал наизусть, как формы, кеш или сеанс, совершенно разные. Для моего проекта это стоило мне много времени без пользы. Я думал, что одним из ключевых объектов для ZF2 был пересмотр документации, которая на данный момент написана намного хуже, чем предыдущая.

Для других моих существующих проектов ZF1.x я не вижу, как управлять обновлением, кроме как полностью переписать приложение.

Из FAQ по Zend Framework 2:

У меня есть приложение, построенное на Zend Framework 1 - смогу ли я перенести его на новую версию?

Абсолютно. Важной частью Zend Framework 2 является уровень миграции, который позволит коду ZF 1 работать на новом движке ZF 2, который будет доступен в будущем. С его помощью вы сможете добавлять новый код ZF 2 и реорганизовывать существующий код в контролируемом темпе.

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

За прошедший год мы перенесли большое приложение из Zend Framework 1 в Zend Framework 2. Мы начали с простых вещей, таких как пространство имен, и постепенно пробирались к различным компонентам библиотеки. В конечном итоге мы закончили редактирование Zend_Layout работать с Zend\Filter, Zend_Form работать с Zend\Filter а также Zend\Json, Zend_Navigation работать с Zend\Permissions\Aclи т. д. Это помогло нам исключить почти все компоненты ZF1, за исключением структуры приложения ZF1, которая включает четыре класса. Zend_Application, Zend_Config, Zend_Controller, а также Zend_Layout, Последний кусок головоломки - реализация Zend\Mvc\Application а также Zend\ViewОстальная часть готова к ZF2.

Совсем недавно мы создали своего рода прокси для подключения к Zend\Mvc\Application и модули ZF2 от ZF1. Это было чрезвычайно полезно. Я подробно описал шаги на http://webjawns.com/2013/11/migrating-to-zf2-integrating-composer-and-doctrineormmodule/.

В итоге...

  • Преобразовать префиксы в пространства имен (Model_ в Model\, Application_Controller в Application\Controller, так далее.)
  • Замена компонентов, отличных от MVC, на аналоги ZF2, включая автозагрузчик
  • Создайте структуру приложения ZF2 и ловушки, чтобы начать использовать модули ZF2
  • Переместить контроллеры и представления (все еще работает над планом для этого)
Другие вопросы по тегам