Миграция на php7

С версии 14 (2.14) UMI.CMS поддерживает работу на php версии 7. Ядро поддерживает работу на любой версии php от 5.4, а для модулей есть отдельный набор реализаций, поддерживающих 7. Старый набор реализаций модулей находится в директории /classes/modules, а новый в /classes/components. 

Примечание: для подключения нового набора реализаций на версиях PHP до PHP 7.*.* необходимо в файле config.ini включить опцию compatible-modules.

 

Перед переносом необходимо ознакомиться с:

 

По сути миграция представляет собой доработку и перенос кастомов.

Ход миграции:

  1. Мигрировать на php7 (удовлетворить требования языка);
  2. Мигрировать на UMI.CMS 14 (перенести код в новые места или внести правки);

Особенности по миграции на php7 в UMI.CMS:

  • Если вы использовали устаревшие функции с префиксом "l_mysql_", то замена для них описана в их phpDoc'ах;
  • Клиентские кастомы из __custom.php следует переносить в customMacros.php;
  • Административные кастомы из __custom_adm.php следует переносить в customAdmin.php;
  • Формат файлов для расширений и кастомов в шаблонах не изменился.
  • Обратите внимание, что теперь нельзя через $this получить доступ ко всем методам из подключенных классов;
  • В каждом подключенном классе есть ссылка на экземпляр модуля в свойстве $module, через него можно получить  доступ к подключенным методам;
  • Поддержка методов onInit() и onImplement() была убрана - теперь можно писать нормальные конструкторы;
  • Теперь в подключаемых классах можно корректно использовать свойства и ограничения области видимости;
  • Все методы обязательно должны вызываться правильно, то есть статические через класс::метод(), а обычные через объект->метод();
  • Класс baseModuleAdmin стал трейтом;
  • В customAdmin.php методы трейта baseModuleAdmin следует вызывать от экземпляра оригинального класса функционала административной панели;
  • def_module теперь не содержит свойства с коллекциями системы;
  • Файл includes.php теперь зарезервирован нами для всех системных модулей, вы можете добавить свои классы в автозагрузку через config.ini [autoload];
  • У всех подключаемых классов должна быть возможность получения их экземпляров через new, то есть они не должны быть трейтами, интерфейсами, абстрактными классами и т.д.;
  • Учитывайте возможность переопределения методов в кастомах;

 

Примечание: Если при переходе на PHP 7 выходит ошибка при подключении к базе данных, то попробуйте пересохранить пароль к базе данных. Подробнее данная проблема описана в статье http://stackoverflow.com/questions/14612551/mysql-remote-connection-fails-with-unknown-authentication-method.