Подготовка Pimcore к версии 11
Обновление до Pimcore 10.6
- Если вы используете версию ниже 10.6.x, сначала выполните обновление до этой версии.
Миграция PHP-шаблонов на Twig
В Pimcore 11 обязательным требованием является замена PHP-шаблонов на Twig.
Внимание
Pimcore 11 больше не поддерживает installing pimcore/php-templating-engine-bundle. Миграция на Twig обязательна даже для корпоративных (enterprise) клиентов.
Для замены строк в файлах шаблонов можно использовать регулярные выражения (RegEx). Например, перепишите: {% extends ':Layout:default.html.twig' %} в {% extends 'Layout/default.html.twig' %}.
Совет
Рекомендуется заменять строки вручную в вашей IDE, а не массовым автоматическим процессом.
Изменения в коде
[Type hints] Проверьте и добавьте подсказки типов возвращаемых значений (return type hints) для классов, расширяющих классы Pimcore или реализующих интерфейсы Pimcore, основываясь на исходном phpdoc или комментариях к методам. Типы возвращаемых значений будут добавлены в основные классы Pimcore, поэтому вы должны добавить их в свои дочерние классы. Вы можете использовать инструмент patch-type-declarations от Symfony для проверки затронутых методов. Для получения более подробной информации, пожалуйста, ознакомьтесь.
[Javascript] Замените плагины на слушатели событий (event listeners) следующим образом:
pimcore.registerNS("pimcore.plugin.MyTestBundle");
pimcore.plugin.MyTestBundle = Class.create(pimcore.plugin.admin, {
getClassName: function () {
return "pimcore.plugin.MyTestBundle";
},
initialize: function () {
pimcore.plugin.broker.registerPlugin(this);
},
preSaveObject: function (object, type) {
var userAnswer = confirm("Are you sure you want to save " + object.data.general.className + "?");
if (!userAnswer) {
throw new pimcore.error.ActionCancelledException('Cancelled by user');
}
}
});
var MyTestBundlePlugin = new pimcore.plugin.MyTestBundle();document.addEventListener(pimcore.events.preSaveObject, (e) => {
let userAnswer = confirm(`Are you sure you want to save ${e.detail.object.data.general.className}?`);
if (!userAnswer) {
e.preventDefault();
e.stopPropagation();
pimcore.helpers.showNotification(t("Info"), t("saving_failed") + ' ' + 'placeholder', 'info');
}
});[Javascript] Замените устаревшие функции JS:
- Используйте t() вместо ts() для переводов.
- Прекратите использование
pimcore.helpers.addCsrfTokenToUrl
[Deprecations] Исправьте все устаревшие элементы (deprecations), указанные в заметках к обновлению, так как они будут удалены в 11 версии. Совет: Ищите уведомления об устаревании в Symfony Profiler (режим Debug) или через команду
tail -f var/log/dev.log | grep 'User Deprecated'.[Extensions] Перестаньте использовать
var/config/extensions.phpдля регистрации бандлов. Используйтеconfig/bundle.php.Не используйте устаревшие
Pimcore\Db\ConnectionInterface,Pimcore\Db\Connectionи трейтPimcore\Db\PimcoreExtensionsTrait. Вместо них используйте интерфейсDoctrine\DBAL\Driver\Connectionи классDoctrine\DBAL\Connection. Некоторые методы должны быть заменены:- Используйте
executeQuery()вместоquery() - Используйте
executeStatement()вместоexecuteUpdate(),deleteWhere(),updateWhere() - Используйте
fetchAssociative()вместоfetchRow() - Используйте
fetchFirstColumn()вместоfetchCol() - Используйте
Pimcore\Db\Helper::fetchPairs()вместоfetchPairs() - Используйте
Pimcore\Db\Helper::upsert()вместоinsertOrUpdate() - Используйте
Pimcore\Db\Helper::quoteInto()вместоquoteInto() - Используйте
quoteIdentifier()вместоquoteColumnAs() - Не используйте
quoteTableAs() - Не используйте
limit() - Используйте
Pimcore\Db\Helper::queryIgnoreError()вместоqueryIgnoreError() - Используйте
Pimcore\Db\Helper::selectAndDeleteWhere()вместоselectAndDeleteWhere() - Используйте
Pimcore\Db\Helper::escapeLike()вместоescapeLike()
- Используйте
[Ecommerce] Если вы используете индексы Elasticsearch, перейдите на реализации для ElasticSearch 8.
[Symfony]
Для использования файлов
.envтеперь требуется пакетsymfony/dotenv, так как переменнаяPIMCORE_SKIP_DOTENV_FILEпо умолчанию активирована (dotenv пропускается). Вы все еще можете использовать файл, относящийся к конкретной среде, например.env.testили.env.prod, для переменных среды, относящихся к конкретной среде.composer require --no-update symfony/dotenv
[Deprecations] Константа
PIMCORE_PHP_ERROR_LOGустарела и будет удалена в Pimcore 11
Миграции
Убедитесь, что все миграции выполнены.
Процесс зависит от вашего способа деплоя.
Вы можете запустить их вручную, вызвав bin/console doctrine:migrations:migrate в любое время или добавьте его в свой конвейер развертывания (deployment pipeline).
Если вы уверены, что сможете выполнить все доступные миграции после composer update, включая пакеты и миграции, относящиеся к вашему приложению, просто включите следующую часть в свой файл composer.json:
"post-update-cmd": [
"./bin/console doctrine:migrations:migrate"
]
Адаптация конфигурации
[Security] Включите новый аутентификатор безопасности и адаптируйте свой файл
security.yamlв соответствии с изменениями здесь:security:
enable_authenticator_manager: trueМоменты, которые следует учитывать при переходе на новый аутентификатор:
- Новая система аутентификации работает с фабрикой хэширования паролей, а не с фабрикой кодировщиков.
- BruteforceProtectionHandler будет заменен на Login Throttling.
- Пользовательский аутентификатор Guard будет заменен на Http\Authenticator.
[Config Environment] Замените устаревшую настройку целей записи и каталога хранения в файле .env на symfony config.
PIMCORE_WRITE_TARGET_IMAGE_THUMBNAILS=symfony-config
PIMCORE_WRITE_TARGET_CUSTOM_REPORTS=settings-store
PIMCORE_CONFIG_STORAGE_DIR_IMAGE_THUMBNAILS=/var/www/html/var/config/image-thumbnails
Например, смотрите Демонстрационную конфигурацию.
pimcore:
config_location:
image_thumbnails:
write_target:
type: 'symfony-config'
options:
directory: '/var/www/html/var/config/image-thumbnails'
document_types:
write_target:
type: 'settings-store'
# другие доступные объекты записи:
# video_thumbnails:
# web_to_print:
# predefined_properties:
# staticroutes:
# perspectives:
# custom_views:
# object_custom_layouts:
# predefined_asset_metadata:
Вы также можете адаптировать config_location из других расширений, таких как Datahub.
Миграция свойств с префиксом o_
As o_ prefix will be removed from data objects system properties in v11. It is recommended to migrate the stored data to use new properties (without o_ prefix).
Please adapt and use these scripts для переноса версий и данных корзины.
Дополнительные моменты, которые следует учитывать
[Web2Print] Устаревший процессор
HeadlessChromeдолжен быть заменен на новый процессорChrome.[Config] Параметр
pimcore.assets.image.focal_point_detectionудален[Composer] Добавьте
pimcore/compatibility-bridge-v10, чтобы сохранить работу некоторых классов 10-й версии:composer require --no-update pimcore/compatibility-bridge-v10[Definition Files] Убедитесь, что файлы определений классов в
var/classesактуальны, запустив миграцию:bin/console doctrine:migration:exec 'Pimcore\Bundle\CoreBundle\Migrations\Version20230508121105'
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.