Пошаговая миграция из Zend Framework с 1 по 2
Мне нужно перенести приложение из Zend Framework 1.12.0 в версию 2. Кажется, никаких руководств по миграции. Я уже изучил соглашения о кодировании ZF2, и я применил пространства имён зависимостей (Zend\Di) и PHP 5.3. Моя цель - реорганизовать мое приложение ZF1 в модуль ZF2.
Вопрос. Можно ли поэтапно продолжить работу с хотя бы частично работающим приложением после каждого шага и избежать огромных шагов рефакторинга? Если да, каковы шаги?
Вот моя идея такой пошаговой миграции, но я не знаю, закончится ли я с рабочим приложением после каждого шага:
- Начните с настройки скелета ZF2
- Настроить новый модуль (MyApp) и реорганизовать содержимое моего приложения ZF1 в структуру папок модуля MyApp. Затем настройте очень базовую конфигурацию и загрузку и перенесите IndexController, расширив его из ZF2 AbstractActionController. Модели (Zend_Db) и представления (Zend_View) будут перенесены позже. Цель здесь состоит в том, чтобы иметь рабочий IndexController:: indexAction, который не имеет многих зависимостей.
- Настройте дополнительную конфигурацию и загрузку (Routing, Translate, Locale, Cache, Db, Acl, ViewHelpers,...). Сначала я хотел бы настроить версии этих компонентов ZF1 и перенести их позже один за другим.
- Перенесите другие контроллеры и настройте вложение зависимостей в контроллеры либо с помощью Zend\Di, либо через с помощью ServiceManager.
- Настройте автоматическое развертывание, создав старые сценарии phing с новой структурой каталогов.
- Перенесите представления (включая помощников) и формы в ZF2.
- Перенесите модели (из Zend_Db либо в ZF2 Zend\Db, либо в Doctrine).
- Перенесите другие компоненты ZF1 по одному (Translate, Locale, Cache, Acl,...).
- Рефакторинг реабилитации и длительный отпуск.
Тем не менее, у меня будет рабочее приложение после каждого шага только в том случае, если некоторые компоненты ZF2 работают вместе с компонентами ZF1. Я понятия не имею, если это, например, можно использовать представления ZF1 (и просмотреть помощники) с контроллерами ZF2.
Ответы
Ответ 1
Миграция из Zend Framework 1
Это руководство предназначено для предоставления инструментов и стратегий для перехода от Zend Framework 1 к Zend Framework 2. Нет единого решения, которое будет работать для каждого проекта, и никаких инструментов для автоматизации процесса.
В этом руководстве мы рассмотрим следующее:
- Инструменты для размещения имен вашего кода.
- Инструменты для использования Zend Framework 2 в вашем приложении Zend Framework 1.
- Стратегии совместного использования Zend Framework 2 и Zend Framework 1.
- Стратегии для упрощения перехода вашего кода, в основном, на чистое разделение логики домена и уровня MVC.
- Стратегии миграции уровня MVC.
- Стратегии миграции вашего домена.
http://framework.zend.com/manual/2.1/en/migration/overview.html
Ответ 2
Где-то когда-то было написано, что это будет легкий peasy с некоторым промежуточным слоем, но я никогда не видел никаких ссылок или чего-либо в библиотеке, которые выглядели просто удаленно.
Теперь единственная вещь и самая последняя информация, которую вы можете найти, находятся на странице Обзор документации. Это:
Примечание. ZF2 не поддерживает обратную совместимость с ZF1 из-за новых функций PHP 5.3+, реализованных в рамках фреймворка, и из-за серьезных перезаписи многих компонентов.
Я никогда не ожидал, что это будет совместимо с обратной совместимостью, но ключевое выражение здесь, я считаю, - это основные перезаписи многих компонентов.
Я начал новый проект с ZF2 несколько месяцев назад, где мне нужна библиотека; поэтому нет MVC, который должен быть легким, не так ли? Пока это был кошмар, потому что ничего не изменилось. Помимо некоторых знакомых имен или структур классов, весь каркас полностью переписан с нуля.
Вещи, которые я любил, много использовали и знали наизусть, как формы, кеш или сеанс, совершенно разные. Для моего проекта это стоило мне много времени без каких-либо преимуществ. Один из ключевых объектов для ZF2, который я думал, - это пересмотр документации, которая по сравнению с предыдущим была хуже, чем предыдущая.
Для моих других существующих проектов ZF1.x я не вижу, как управлять обновлением, кроме как полностью переписать приложение.
Ответ 3
Из Zend Framework 2 FAQ:
У меня есть приложение, созданное с помощью Zend Framework 1 - смогу ли я перенести его в новую версию?
Совершенно верно. Важной частью Zend Framework 2 является уровень миграции, который позволит запустить код ZF 1 на новом движке ZF 2, который будет доступен в будущем. С его помощью вы сможете добавить новый код ZF 2 и реорганизовать существующий код с контролируемым темпом.
Однако на данный момент я не слышал о каком-либо реальном уровне миграции. Мы можем только надеяться, что будет, но на данный момент у меня есть свои сомнения.
Ответ 4
Мы переместили большое приложение из Zend Framework 1 в Zend Framework 2 за последний год. Мы начали с простых вещей, таких как namespacing, и медленно пробивались в различные компоненты библиотеки. В конечном итоге мы закончили редактирование 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.
- Переместить контроллеры и представления (все еще работает над планом для этого)