Перейти к основному содержимому

Обновление Pimcore с версии 6.x до версии 10

Изменения в системных требованиях

  • PHP >=8.0 <8.2
  • Apache >= 2.4
  • Composer >= 2.0

Так как Pimcore 6.x работает только на PHP < 8.0, а Pimcore 10 требует PHP >=8.0 <8.2, вам потребуется переключить версию PHP в процессе обновления.

Изменения в требованиях к базе данных

  • MariaDB >= 10.3
  • MySQL >= 8.0

Подготовительные работы

  • Если у вас версия от 6.0.0 до 6.8.x, сначала обновитесь до 6.9.x, и только после этого приступайте к переходу на версию 10.
  • Проверьте, поддерживают ли все используемые вами сторонние бандлы Pimcore X.
  • Если вы используете REST Webservices или движок шаблонов PHP, перейдите на Datahub и шаблоны Twig или рассмотрите возможность использования нашего [предложения LTS] (https://pimcore.com/en/services/lts), которое возвращает эту функциональность в виде дополнительных коммерческих пакетов.
  • В случае, если bin/console debug:config pimcore documents.editables.naming_strategy возвращает значение legacy, вы не адаптировались к новой редактируемой стратегии именования, начиная с версии Pimcore 5. Пожалуйста, выполните миграцию в Pimcore 6 перед обновлением до Pimcore X, в противном случае все редактируемые вами документы будут потеряны. Следуйте этому руководству

ВАЖНЫЕ ИЗМЕНЕНИЯ, КОТОРЫЕ НЕОБХОДИМО ВНЕСТИ ПЕРЕД ОБНОВЛЕНИЕМ! (ДЛЯ ИСПОЛЬЗОВАНИЯ С PHP < 8.0)

Обновление структуры папок

Измените структуру папок проекта в соответствии с рекомендациями Symfony Flex. Смотрите демо изменений здесь

Перенесите устаревшие конфигурации модулей/контроллеров/действий на новые ссылки на контроллеры

Вы можете использовать ./bin/console migration:controller-reference для переноса существующих документов, статических маршрутов и типов документов в новые ссылки на контроллеры в формате: AppBundle\Controller\FooController::BarAction.

Миграция версий для совместимости с Pimcore X

Документы: Если нужно сохранить историю версий, выполните команду pimcore:documents:migrate-elements для миграции устаревшего свойства elements в editables (актуально для версий, созданных до 6.7).

Объекты данных: Пожалуйста, адаптируйте этот скрипт миграции и выполните переход к новым пространствам имен классов в ваших файлах старой версии, если вы хотите перенести эти файлы в Pimcore X, например, AppBundle\\.. в App\\...

Убедитесь, что конфигурация вашей базы данных включает следующие определения:

doctrine:  
dbal:
connections:
default:
mapping_types:
enum: string
bit: boolean

Очистка composer.json

composer remove --no-update wikimedia/composer-merge-plugin doctrine/migrations php-http/guzzle6-adapter  
composer require --no-update php-http/guzzle7-adapter:^0.1.1

Обновите composer.json в соответствии с skeleton

Удалите

"autoload": {  
"classmap": [
"app/AppKernel.php"
]
}

из composer.json.

Добавьте "AppBundle\\": ["src/"], в блок autoload, если вы хотите продолжать использовать AppBundle вместо App.

"autoload": {  
"psr-4": {
"App\\": ["src/"],
"AppBundle\\": ["src/"],
"Pimcore\\Model\\DataObject\\": "var/classes/DataObject",
... возможно, какие-то другие элементы
}
},

(В качестве альтернативы вы можете изменить пространства имен всех классов в папке app/ на App\..., где раньше было AppBundle\....)

Изменения файлов и папок

  • Переместите конфигурации из app/config/*.yml в config/*.yaml
  • Переместите шаблоны из app/Resources/views в templates и пакеты шаблонов из app/Resources/XYZBundle/views в templates/bundles/XYZBundle.
  • Переместите app/AppKernel.php в src/Kernel.php и отредактируйте его так, чтобы в нем было namespace App; и имя класса Kernel (добавьте псевдоним к родительскому классу для предотвращения коллизии имен классов, например use Pimcore\Kernel as PimcoreKernel; и extends PimcoreKernel).
  • Переименуйте web/ в public/ и web/app.php в public/index.php
  • Переименуйте config/routing.yml в config/routes.yaml
  • Переместите настройки, относящиеся к вашей среде, в config/packages/$ENV/*.yaml (например, config.prod.yml)
  • Проверьте структуру папок с помощью Skeleton Project

Несколько помощников для ваших изменений

mv app/config/ config/  
mv web/ public/
mv app/Resources/views/ templates/
mv src/AppBundle/* src/
mv public/app.php public/index.php
mv app/AppKernel.php src/Kernel.php

Добавьте файл окружения .env

Добавьте файл .env в корневой каталог проекта, если он еще не существует.

Перенос шаблонов PHP в Twig

Поскольку Pimcore X поддерживает только Symfony 5, в котором была отключена поддержка шаблонов PHP, необходимо обновить ваши шаблоны PHP до Twig.

Если вы используете enterprise edition, то по-прежнему можно поддерживать шаблоны PHP, установив pimcore/php-templating-engine-bundle.

Вы можете использовать регулярное выражение для замены строк в ваших файлах шаблонов. Например, перепишите {% extends ':Layout:default.html.twig' %} на {% extends 'Layout/default.html.twig' %}.

совет

Лучше замените строки вручную в вашей среде IDE, а не в пакетном режиме.

Адаптация системных настроек

В связи с изменением конфигурации Pimcore, согласно которому в узле pimcore больше не разрешены дополнительные ключи, требуется адаптировать системные настройки в соответствии с system.template.yaml (путь по умолчанию <Pimcore root>/var/config/system.yaml) и config.yaml (путь по умолчанию после адаптации структуры папок <Pimcore root>/config/config.yaml)

На что следует обратить внимание:

  • Удалить конфигурацию swiftmailer
  • Переименовать ключ cache в full_page_cache
  • Удалить конфигурацию webservice

Адаптация конфигурации безопасности

Больше невозможно объединять конфигурации безопасности из нескольких мест, включая бандлы. Вместо этого вы должны переместить их в один конфигурационный файл, например, config/packages/security.yaml. Проверьте bin/console debug:config security firewalls, чтобы найти конфигурации брандмауэра, которые необходимо перенести. Пожалуйста, адаптируйте config/packages/security.yaml из skeleton и объедините свои собственные конфигурации брандмауэра в один файл.

Очистка каталогов /tmp

rm -r var/tmp  
rm -r public/var/tmp

Очистка корзины

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

rm -r var/recyclebin  

TRUNCATE TABLE recyclebin;  

Распаковка архивированных версий данных

Pimcore X больше не поддерживает сжатые версии данных, выполните следующую команду, чтобы рекурсивно распаковать их: gzip -d -r var/versions/

Перемещение пользовательских изображений

Расположение пользовательских изображений по умолчанию изменилось, просто переместите содержимое в новое место:

mkdir var/admin  
mv var/user-image var/admin/user-image

Перемещение пользовательского логотипа

Расположение пользовательского логотипа изменилось, просто переместите его на новое место:

mkdir var/admin  
mv var/config/custom-logo.* var/admin/custom-logo.image

Обновление .htaccess или конфигурации Nginx

  • Обновленный .htaccess доступен здесь.
  • Обновленная конфигурация Nginx доступна здесь.

ПЕРЕКЛЮЧИТЕ COMPOSER И ВЕРСИЮ PHP И ВЫПОЛНИТЕ ОБНОВЛЕНИЕ!

  • Убедитесь, что Composer обновлен до версии >= 2.0
  • Переключите версию PHP на PHP >=8.0 <8.2
  • Запустить обновление composer (COMPOSER_MEMORY_LIMIT=-1 composer update)

ИЗМЕНЕНИЯ, КОТОРЫЕ НЕОБХОДИМО ВНЕСТИ ПОСЛЕ ОБНОВЛЕНИЯ! (ДЛЯ ИСПОЛЬЗОВАНИЯ С PHP >=8.0 <8.2)

Проверка выполнения миграций

По умолчанию Composer update запускает миграции Pimcore автоматически, однако лучше проверить, все ли миграции выполнены для плавного перехода. Для проверки запустите команду: ./bin/console doctrine:migrations:up-to-date --prefix=Pimcore\\Bundle\\CoreBundle.

Если вы увидите сообщение [ERROR] Out-of-date! x migrations are available to execute., выполните команду: ./bin/console doctrine:migrations:migrate --prefix=Pimcore\\Bundle\\CoreBundle.


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.