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

Подготовка 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'  


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