Обновление CakePHP 1.1 на 1.3

11:29

cakephp_update
Недавно вышла новая версия CakePHP 1.3 с многочисленными изменениями. Так получилось, что один мой старый проект на версии фреймворка 1.1 я не переводил на версию 1.2, поэтому решил сразу переписать его для 1.3. Хочу вкратце написать о процессе миграции приложений.

Начать лучше с создания шаблона из командной строки: cake -app <directory> bake. После этого в каталоге <directory> появится пустое приложение для версии 1.3. Первым делом копируем файлы старого приложения в этот новый каталог:

/models/*
/controllers/*
/views/*
/vendors/*
- причем ваши собственные библиотеки лучше сразу перенести из /vendors/ в /libs/
/app_controller.php, app_model.php
/webroot/js/*, /webroot/img/*, /webroot/css/* и прочие каталоги.
Файл /webroot/index.php копировать не нужно, т.к. он обновился.

У шаблонов поменялось расширение ещё с версии 1.2, поэтому их нужно просто переименовать из *.thtml в *.ctp.

По очереди открывая файлы настроек в каталоге config, аккуратно переносим все настройки путем редактирования новых файлов. И не забываем переделать пути в routes.php.

Настал черед кода. Все используемые компоненты и хелперы теперь нужно указывать в принудительном порядке (и при обновлении с 1.2). Например:

2.public $helpers = array('Session','Html','Form');
1.public $components = array('Session','Auth','Cookie');

Единственное исключение – хелпер Paginator. Хелпер Javascript отсутствует, ему на смену пришел Jshelper. А если вы использовали javascript->link(), то просто поменяйте на html->script(). Кстати, к версии 1.2 это тоже относится.

Основные изменения на всех уровнях MVC:

Модели

  • Все функции find… нужно заменить на соответствующие find(‘all’…), find(‘first’…), find(‘count’…) и так далее. А метод generateList() – на find(‘list’…).
  • Старые методы execute() необходимо заменить на query().
  • Удаление del() переименовать в delete(). К любым другим методам del() (в компоненте Session, например) это тоже относится.

Контроллеры

  • Заголовок страниц нужно устанавливать либо с помощью $this->set(‘title_for_layout’,'…’), или аналогично, но внутри шаблона.
  • Если вы использовали свои методы для разбивки на страницы, замените их на paginate() и сделайте соответствующие изменения в шаблонах. То же самое касается и авторизации: старые «логины» лучше переписать с использованием компонента Auth.
  • Не забудьте также о новых компонентах Email и Cookie.
  • Загрузка сторонних библиотек, моделей и прочих файлов производится через App::import(): App::import(‘Model’,'…’), App::import(‘Vendor’,'…’), App::import(‘Lib’,'…’).

Шаблоны

  • Все методы для работы с формами теперь находятся в хелпере Form. Следовательно нужно поменять все $html->form… на $form->input() и т.д.
  • Метод для доступа к значениям формы $html->tagValue стал называться $form->value(); $html->tagErrorMsg замените на $form->error, a $html->labelTag на $form->label.
  • Функцию для вывода элементов renderElement() переименуйте в element().
  • Все обращения к моделям и полям в старом формате (Model/field) нужно заменить на новый – Model.field.
  • Желательно (но не обязательно) также использовать новый формат доступа к хелперам через $this: например, обращение к хелперу form: $this->Form->input(). Сделано это было для того, чтобы освободить пространство для пользовательских переменных.

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

Все эти сведения, а также другие отличия можно найти и в официальной документации:

Удачи в обновлении!

(c)