Обновление CakePHP 1.1 на 1.3
11:29
Недавно вышла новая версия 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(). Сделано это было для того, чтобы освободить пространство для пользовательских переменных.
Остальные мелочи можно будет исправить в режиме отладки, ведь все равно придется заново тестировать приложение.
Все эти сведения, а также другие отличия можно найти и в официальной документации:
Удачи в обновлении!