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

Примечания по обновлению

Pimcore 11.5.0

Общее

[База данных]

  • Добавление индекса к таблицам users_workspaces_asset, users_workspaces_document и users_workspaces_object в userId, cpath и list для улучшения проверки разрешений. Обязательно запустите миграцию bin/console doctrine:migrations:execute Pimcore\\Bundle\\CoreBundle\\Migrations\\Version20241114142759.
  • Добавлен индекс для столбцов versionCount

[События]

  • Свойство context для ResolveUploadTargetEvent устарело. Вместо этого используйте метод setArgument().
  • Расширение Twig pimcore_block устарело. Вместо этого используйте pimcoreblock или pimcoremanualblock.

[Контроллеры]

  • Заменены все $request->get() на их явный источник ввода.

[Зависимости]

  • Добавлена поддержка doctrine/orm v3 и symfony/webpack-encore-bundle v2.

[WYSIWYG-редактор]

  • TinyMCE устарел. Вместо этого используйте Quill (pimcore/quill-bundle).

Элементы

[Ассеты]

  • Добавлены настройки pimcore.assets.metadata.alt, pimcore.assets.metadata.copyright, pimcore.assets.metadata.title, позволяющие определить, какие метаданные следует использовать при преобразовании тега изображения.

[Объекты данных]

  • Передача несуществующей или недопустимой единицы измерения при программной настройке связанных типов объектов QuantityValue приведет к возникновению исключения.

Pimcore 11.4.0

Общее

[Логирование]

  • Изменены имена файлов журнала. В среде dev теперь используются имена файлов dev-debug.log и dev-error.log. В среде prod записывается только prod-error.log.

[Twig DeferredExtension]

  • Удалена зависимость rybakit/twig-deferred-extension и сервис Twig\DeferredExtension\DeferredExtension. Если вы используете отложенные блоки twig, пожалуйста, добавьте зависимость в свой собственный файл composer.json, а сервис - в свой собственный файл service.yaml

[Устаревшие расширения Twig]

  • Расширение Twig pimcore_cache устарело. Вместо этого используйте тег twig pimcorecache.
  • Методы pimcore_placeholder, pimcore_head_script, pimcore_head_style
    • captureStart() и captureEnd() устарели. Вместо этого используйте собственный тег twig set. Взгляните на соответствующие документы для каждого расширения twig в качестве примера.

[Уведомления]

  • Расширение уведомлений для studio, добавление столбца isStudio с флагом и столбца payload с соответствующими параметрами получения и установки. Обязательно запустите миграцию bin/console doctrine:migrations:execute Pimcore\\Bundle\\CoreBundle\\Migrations\\Version20240813085200.

Pimcore 11.3.0

Общее

[Системные настройки]

  • Неиспользуемый параметр general.language устарел.

[Листинг]

  • Теперь методы setOrder() и setOrderKey() генерируют InvalidArgumentException, если параметры недопустимы.

[Html в Image]

  • [Gotenberg] Увеличено минимальное требование к gotenberg-php с ^2.0 до ^ 2.4, чтобы добавить поддержку передачи размера скриншота

[Ассеты]

  • MIME-тип загружаемых ресурсов определялся с помощью symfony/mime, прежде в некоторых случаях использовалась Flysystem, что приводило к различным типам MIME для некоторых редко используемых расширений файлов (например, STEP).

[Сетка]:

  • Перенес функцию, связанную с сетевыми данными, в admin-classic-ui-bundle версии 1.5.
  • Метод Service::getHelperDefinitions() здесь устарел и перенесен в admin-classic-ui-bundle.

[Простой внутренний поиск]

  • В связи с рефакторингом данных сетки, пожалуйста, обратите внимание, что для корректного запуска этого дополнительного пакета необходимо установить admin-classic-ui-bundle v1.5

[DBAL]

  • Увеличено минимальное требование к doctrine/dbal до ^ 3.8 и заменены устаревшие / неиспользуемые методы, чтобы приблизиться к поддержке v4.

[Composer]

  • Удалено требование "phpoffice/phpspreadsheet" из-за того, что оно не используется, а точнее, перенесено в конкретный пакет, который фактически его использует. Пожалуйста, проверьте и соответствующим образом адаптируйте требования composer к вашему проекту.

[Зависимости]

  • Зависимости теперь разрешаются с помощью messenger queue и могут быть отключены. По умолчанию это выполняется синхронно, но можно сделать это асинхронным, добавив следующую конфигурацию:
framework:  
messenger:
transports:
pimcore_dependencies: "doctrine://default?queue_name=pimcore_dependencies"
routing:
'Pimcore\Messenger\ElementDependenciesMessage': pimcore_dependencies

и отключить с помощью:

pimcore:  
dependency:
enabled: false

Pimcore 11.2.4 / 11.2.3.1 / 11.1.6.5

Миниатюры ассетов

  • Создание миниатюр для ресурсов, документов и видео теперь поддерживает только следующие форматы: avif, eps, gif, jpeg, jpg, pjpeg, png, svg, tiff, webm, webp.
  • Вы можете расширить этот список, добавив свои форматы в нижнюю часть:
  pimcore:  
assets:
thumbnails:
allowed_formats:
- 'avif'
- 'eps'
- 'gif'
- 'jpeg'
- 'jpg'
- 'pjpeg'
- 'png'
- 'svg'
- 'tiff'
- 'webm'
- 'webp'
- 'pdf' # Добавьте желаемый формат здесь

  • Коэффициент масштабирования изображений с высоким разрешением теперь ограничен максимальным значением 5,0. Если вам нужно увеличить масштаб изображения, вы можете использовать параметр max_scaling_factor в конфигурации.
  pimcore:  
assets:
thumbnails:
max_scaling_factor: 6.0

Pimcore 11.2.0

Элементы

[Документы]:

  • Использование конфигурации outputFormat для редактирования Pimcore\Model\Document\Editable\Date устарело, вместо этого используйте конфигурацию outputIsoFormat.
  • Сервис Pimcore\Document\Renderer\DocumentRenderer устарел, вместо него используйте Pimcore\Document\Renderer\DocumentRendererInterface.
  • Предварительный просмотр страниц и сравнение версий теперь можно выполнять с помощью Gotenberg v8. Чтобы заменить безголовый Chrome, обновитесь до версии Gotenberg v8 и обновите клиентскую библиотеку: composer require gotenberg/gotenberg-php:^2.

[Объекты данных]:

  • Методы getAsIntegerCast() и getAsFloatCast() класса Pimcore\Model\DataObject\Data теперь устарели.
  • Все алгоритмы, отличные от password_hash, используемые в типе данных пароля, теперь устарели, пожалуйста, используйте вместо них password_hash.
  • Multiselectionoptionsproviderinterface устарел, пожалуйста, используйте вместо него SelectOptionsProviderInterface.

Общее

[Локализация]

  • Сервисы Pimcore\Localization\LocaleService и pimcore.locale устарели, вместо них используйте Pimcore\Localization\LocaleServiceInterface.

[Навигация]

  • Добавлена опция rootCallback в Pimcore\Navigation\Builder::getNavigation()

[Symfony]

  • Обновлены пакеты Symfony до "^6.4".

[Объекты значений]

  • Добавлены новые самоподтверждающиеся объекты значений:
    • Pimcore\ValueObject\BooleanArray
    • Pimcore\ValueObject\IntegerArray
    • Pimcore\ValueObject\Path
    • Pimcore\ValueObject\PositiveInteger
    • Pimcore\ValueObject\PositiveIntegerArray
    • Pimcore\ValueObject\StringArray

[!ПРЕДУПРЕЖДЕНИЕ]
Для обеспечения согласованности переменных среды в boostrap, пожалуйста, исправьте public/index.php в корне проекта, переместив строку Bootstrap::bootstrap(); чуть выше строки $kernel = Bootstrap::kernel(), а не за пределы закрытия. В качестве альтернативы это можно исправить, применив этот патч

Возможно, вам также потребуется настроить вашу bin/console на последнюю версию skeleton: https://github.com/pimcore/skeleton/blob/11.x/bin/console

Pimcore 11.1.0

Элементы

[Все]:

  • Свойства теперь обновляются только в базе данных с измененным состоянием (при вызове setProperties или setProperty).
  • Добавлена подсказка для второго параметра array $params = [] в Element/ElementInterface::GetById.
  • Pimcore\Helper\CsvFormulaFormatter устарел. Вместо этого используйте League\Csv\EscapeFormula.

[Ассеты]:

  • Фоновая обработка ассетов документов (например, количество страниц, миниатюры и поиск по тексту) может быть отключена с помощью настройки:

    pimcore:  
    assets:
    document:
    thumbnails:
    enabled: false #отключить создание эскизов для ассетов документов
    process_page_count: false #отключить обработку количества страниц
    process_text: false #отключить обработку извлечения текста
    scan_pdf: false #отключить сканирование PDF-документов на наличие небезопасного JavaScript.

  • Сферические метаданные видеоресурсов теперь вычисляются в фоновом режиме, а не при загрузке.

[Объекты данных]:

  • Свойство $fieldtype класса Pimcore\Model\DataObject\Data теперь устарело. Вместо этого используйте метод getFieldType().
  • Выходные данные метода getSiblings() теперь сортируются на основе родительских параметров сортировки (таких же, как getChildren), а не по алфавиту.
  • Поля ввода checkValidity проверяют длину столбца.

[Документы]:

  • Удален фильтр allow list из Pimcore\Model\Document\Editable\Link, чтобы разрешить передачу любых допустимых атрибутов в конфигурации.
  • Свойство Pimcore\Navigation\Page::$_defaultPageType устарело.

Общее

[Аутентификация]:

Токены для сброса пароля теперь хранятся в базе данных и используются только один раз (срок их действия истекает при создании нового пароля или при его использовании).

  • [Static Page Generator]: Статические страницы могут быть сгенерированы на основе основного домена подсайтов, используя приведенную ниже конфигурацию:

    pimcore:  
    documents:
    static_page_router:
    use_main_domain: true #генерирует страницы по пути /public/var/tmp/pages/my-domain.com/en.html

    и адаптация конфигурации NGINX:

    map $args $static_page_root {  
    default /var/tmp/pages/$host;
    "~*(^|&)pimcore_editmode=true(&|$)" /var/nonexistent;
    "~*(^|&)pimcore_preview=true(&|$)" /var/nonexistent;
    "~*(^|&)pimcore_version=[^&]+(&|$)" /var/nonexistent;
    }
    map $uri $static_page_uri {
    default $uri;
    "/" /%home;
    }

[Обработчик основного кэша]:

  • Удаление избыточных тегов элементов кэша с помощью собственного ключа.

[Установщик]:

  • Передача --install-bundles в качестве пустой опции теперь устанавливает необходимые пакеты.

[Режим обслуживания]:

  • Проверка режима обслуживания выполняется через tmp_store в базе данных. Использование файлов режима обслуживания не рекомендуется.
  • Не рекомендуется использовать следующие методы режима обслуживания в Pimcore\Tool\Admin:
    • Вместо activateMaintenanceMode используйте MaintenanceModeHelperInterface::activate.
    • Вместо deactivateMaintenanceMode используйте MaintenanceModeHelperInterface::deactivate.
    • isInMaintenanceMode, вместо этого используйте MaintenanceModeHelperInterface::isActive.
    • В Pimcore 12 будут удалены isMaintenanceModeScheduledForLogin, scheduleMaintenanceModeOnLogin, unscheduleMaintenanceModeOnLogin.

Pimcore 11.0.7

  • Использование значения null в методе Pimcore\Model\DataObject\Data::setIndex() теперь устарело. Разрешены только логические значения.

Pimcore 11.0.0

API

[Общее] :

  • Внимание: Добавлены собственные типы php для типов аргументов, типов свойств, типов возвращаемых значений и строгого объявления типов, где это возможно. Дважды проверьте свои классы, которые расширяют классы Pimcore, и при необходимости адаптируйте.

[Начальная загрузка] :

  • Использование Pimcore\Bootstrap::bootstrap() для автозагрузки классов больше не будет работать.
  • Удалена неиспользуемая константа PIMCORE_APP_BUNDLE_CLASS_FILE.

[События] :

  • Событие pimcore.element.note.postAdd было удалено. Вместо него используйте pimcore.note.postAdd. Примечание: Тип события изменен с ElementEvent на ModelEvent.
  • Отчет о событии pimcore.admin.reports.save_settings был переименован в pimcore.reports.save_settings.
  • Перенес события SEARCH_LIST_BEFORE_FILTER_PREPARE, SEARCH_LIST_BEFORE_LIST_LOAD, SEARCH_LIST_AFTER_LIST_LOAD, QUICKSEARCH_LIST_BEFORE_LIST_LOAD и QUICKSEARCH_LIST_AFTER_LIST_LOAD из Pimcore\Bundle\AdminBundle\Event\AdminEvents в Pimcore\Bundle\SimpleBackendSearchBundle\Event\AdminSearchEvents.
  • AdminEvents::ELEMENT_PERMISSION_IS_ALLOWED был переименован в Pimcore\Event\ElementEvents::ELEMENT_PERMISSION_IS_ALLOWED.

[Установщик] :

  • Удалена опция --ignore-existing-config из команды pimcore:install. Файл system.yaml больше не используется, и, следовательно, этот флаг устарел. Смотрите руководство по подготовке
  • Изменен тип возвращаемого значения Pimcore\Extension\Bundle\Installer\InstallerInterface::getOutput на BufferedOutput | NullOutput.
  • Добавлено событие BundleSetupEvent. Пакеты, доступные для установки, можно настроить в процессе установки с помощью Eventlistener или EventSubscriber.
  • Пакеты можно добавлять и удалять. Вы можете установить флажок, если хотите рекомендовать пакет.

[Логирование] :

  • Удалена константа PIMCORE_PHP_ERROR_LOG
  • Изменен monolog/monolog на ^3.2 и symfony/monolog-bundle на ^3.8 (что добавляет поддержку monolog v3). Пожалуйста, соответствующим образом адаптируйте вашу пользовательскую реализацию, например. записи журнала теперь являются объектами LogRecord, а не массивом.
  • Удалена возможность использования параметра GET pimcore_log.

[Разное] :

  • Помечены классы Pimcore\Model\User\AbstractUser и Pimcore\Model\User\UserRole как абстрактные.
  • Помечены классы Pimcore\File как внутренние. Этот класс больше не следует использовать, вместо него используйте Symfony\Component\Filesystem.

[Дополнительные удаленные функции API] :

  • Удалены getChilds, setChilds и hasChild, вместо которых используются getChildren, setChildren и hasChildren.
  • Удален класс PhpArrayTable
  • Удален устаревший PhpArrayFileTable.
  • Удален метод Pimcore\Db\Helper::InsertOrUpdate(), пожалуйста, используйте вместо него Pimcore\Db\Helper::upsert().
  • Удалены устаревший интерфейс Pimcore\Db\ConnectionInterface, класс Pimcore\Db\Connection и признак Pimcore\Db\PimcoreExtensionsTrait.
  • Удален JsonListing, подробности смотрите в #12877.
  • Устаревшее исключение MissingDependencyException было удалено.
  • Удален устаревший метод getMasterRequest() в пользу getMainRequest().
  • Удален устаревший метод Kernel::getRootDir(), вместо него используется Kernel::getProjectDir().
  • Удалены методы Pimcore\Tool\Admin::isExtJS6(), \Pimcore\Tool\Admin::getLanguageFile(), \Pimcore\Tool::exitWithError().
  • Удалены следующие методы из Pimcore\File: mkdir, put, getFileExtension, setDefaultMode, getDefaultMode, setDefaultFlags и rename.

[Дополнительные соответствующие обновления зависимостей] :

  • Обновлены friendsofsymfony/jsrouting-bundle до версии ^3.2.1
  • Обновлены пакеты Symfony до ^6.2.
  • Очищены неиспользуемые пакеты Symfony из composer.json, например, form, web-link, смотрите также #13097
  • Изменено значение mjaschen/phpgeo на ^4.0.
  • Обновлена версия codeception/кодосцепция кода до версии ^5.0. Теперь Pimcore использует новую структуру каталогов для тестов (Codeception 5 directory structure). Подробности, пожалуйста, смотрите в #13415
  • Повышен уровень matomo/device-detector до ^6.0.
  • Увеличено минимальное требование к presta\sitemap-bundle до ^ 3.3, отменена поддержка версии 2 и удален соответствующий слой BC.
  • Повышено минимальное требование к league/flysystem-bundle до версии 3.0 (которая вводит методы directoryExists(), has() и исправляет поддержку опции конфигурации directory_visibility). Пожалуйста, измените требования к адаптерам Flysystem в соответствии с ^ 3.0 в вашем проекте composer.json.

Интерфейс администратора

[Общее] :

  • Удален adminer как встроенный инструмент управления базами данных.
  • Удалены устаревшие классы событий администратора: Pimcore\Event\Admin\*, Pimcore\Event\AdminEvents, Pimcore\Event\Model\*.
  • Изменен процесс создания навигации. Стало проще добавлять главное меню и подменю. Подробности смотрите в разделе Добавление пользовательских элементов к основной навигации

[Аутентификация] :

  • Удалена поддержка старой системы аутентификации
  • Удалена защита от BruteforceProtection, теперь используются настройки Symfony по умолчанию
  • Удален PreAuthenticatedAdminToken
  • События входа администратора
    • Удалено событие AdminEvents::LOGIN_CREDENTIALS (pimcore.admin.login.credentials). Вместо этого используйте Pimcore\Bundle\AdminBundle\Event\Login\LoginCredentialsEvent.
    • Удалено событие AdminEvents::LOGIN_FAILED (pimcore.admin.login.failed). Вместо этого используйте Symfony\Component\HttpFoundation\Request\LoginFailureEvent.
  • Удалена фабрика кодировщиков паролей Pimcore, служба pimcore_admin.security.password_encoder_factory и конфигурация pimcore.security.factory_type.
  • Удален устаревший метод Pimcore\Bundle\AdminBundle\Security\User::GetUserName(), вместо него используется getIdentifier().
  • Устаревший метод Pimcore\Tool\Authentication::authenticateHttpBasic() был удален.
  • Устаревший метод Pimcore\Tool\Authentication::authenticatePlaintext() был удален.

[JS] :

  • Упакованы некоторые библиотеки JS с encore
  • Удалены устаревшие функции JS (ts() и pimcore.helpers.addCsrfTokenToUrl())
  • Удален уровень BC-брокера плагинов для событий JS

[Безопасность] :

  • По умолчанию включена политика защиты содержимого.
  • Реализован Symfony HTML sanitizer для редакторов WYSIWYG. Пожалуйста, обязательно очистите сохраненные данные с помощью этого скрипта. Кроме того, при использовании API для установки данных WYSIWYG, пожалуйста, передавайте закодированные символы для объектов html <,>, & и т.д. Данные кодируются дезинфицирующим средством перед сохранением в базе данных, и те же закодированные данные будут возвращены API. Для получения подробной информации о конфигурации смотрите также Конфигурация WYSIWYG

Бандлы

[Общее о бандлах] :

  • Удалена поддержка загрузки пакетов через extensions.php.
  • Удален менеджер расширений (Инструменты -> пакеты и блоки) из пользовательского интерфейса администратора.
  • Удалены команды: pimcore:bundle:включить, pimcore:bundle:отключить.
  • Удалена поддержка конфигурации dontCheckEnabled из области, доступной для редактирования.
  • Поведение asset install и Composer::installAssets по умолчанию изменено, что означает, что файлы (такие как css, js) будут копироваться вместо символических ссылок. Таким образом, вы должны запускать команду bin/console assets:install для каждого изменения. Поведение может быть изменено в composer.json следующим образом:
"extra": {  
"symfony-assets-install": "relative"
}

[Извлеченная основная функциональность] :

  • Функциональность, которая была перенесена в отдельный пакет внутри репозитория pimcore/pimcore и которую необходимо включить во время установки Pimcore или в config/bundles.php:

    • [Application Logger] Журнал приложений был перенесен в PimcoreApplicationLoggerBundle. Пожалуйста, обратите внимание на новые пространства имен для классов из этого пакета.

    • [CustomReports] были перенесены в PimcoreCustomReportsBundle

      • Конфигурация pimcore:custom_reports была удалена, пожалуйста, используйте вместо нее pimcore_custom_reports: в PimcoreCustomReportsBundle.
    • [Glossary] был перенесен в PimcoreGlossaryBundle

      • Тег pimcoreglossary() был удален, пожалуйста, используйте twig фильтр pimcore_glossary.
      • Конфигурация pimcore:glossary была удалена, пожалуйста, используйте вместо нее pimcore_glossary: в PimcoreGlossaryBundle.
    • [Search] был перенесен в PimcoreSimpleBackendSearchBundle

      • Функциональность поиска была выделена в отдельный пакет (PimcoreSimpleBackendSearchBundle)
      • Команда pimcore:search-backend-reindex была перенесена в пакет поиска
      • Значки поиска по всему Pimcore будут недоступны без пакета поиска
      • Функция встроенного поиска для некоторых отношений будет недоступна без пакета поиска
      • advanced поиск по GDPR также был перенесен. Мы предоставляем базовый поиск, чтобы охватить основные функциональные возможности, если пакет поиска недоступен.
      • Ассеты, объекты, документы и быстрый поиск были перенесены в пакет поиска
      • Все файлы, связанные с внутренним поиском, были перенесены в пакет поиска (пожалуйста, ознакомьтесь с пользовательскими реализациями, если вы полагаетесь на какой-либо внутренний поисковый компонент!)
      • Добавлен дополнительный транспорт для обмена сообщениями для внутреннего поиска (pimcore_search_backend_message)
      • Перенесена команда FullTextIndexOptimizeTask в SimpleBackendSearchBundle. В соответствии с этим пространство имен изменилось с Pimcore\Maintenance\Tasks\FullTextIndexOptimizeTask на Pimcore\Bundle\SimpleBackendSearchBundle\Task\Maintenance\FullTextIndexOptimizeTask.
    • [SEO] Редактор документов, редиректы, карты сайта, robots.txt и HTTP-ошибки были перенесены в PimcoreSeoBundle

    • [Staticroutes] был перенесен в PimcoreStaticRoutesBundle

      • Конфигурация pimcore:staticroutes: была удалена, пожалуйста, используйте вместо нее pimcore_static_routes: в PimcoreStaticRoutesBundle.
    • [UUID] был перенесен в PimcoreUuidBundle

      • Конфигурация pimcore:general:instance_identifier была удалена, пожалуйста, используйте вместо нее pimcore_uuid:instance_identifier в PimcoreUuidBundle. Пожалуйста, запустите bin/console config:dump pimcore_uuid, чтобы узнать больше о конфигурации идентификатора экземпляра после установки пакета.
    • [WordExport] был перенесен в PimcoreWordExportBundle.

    • [Перевод в формате Xliff] Импорт/экспорт и связанные с ними события перенесены в PimcoreXliffBundle. Пожалуйста, проверьте и адаптируйте пространства имен событий.

    • [WYSIWYG-редактор] Редактор по умолчанию был изменен с CKEditor на TinyMCE и перенесен в PimcoreTinymceBundle. Пожалуйста, адаптируйте пользовательскую конфигурацию и расширьте средство очистки html для поддержки необходимых html-элементов в редакторе wysiwyg.

  • Функциональность, которая была перенесена в отдельный пакет и собственный репозиторий и которую необходимо установить через composer, а также активировать в config/bundles.php:

    • [AdminBundle] Пакет Admin Bundle был перенесен в пакет pimcore/admin-ui-classic-bundle.

      • Пожалуйста, запросите в вашем файле composer.json и зарегистрируйте пакет в ядре:
      public function registerBundlesToCollection(BundleCollection $collection): void  
      {
      // pimcore bundles
      $collection->addBundle(new \Pimcore\Bundle\AdminBundle\PimcoreAdminBundle\PimcoreAdminBundle(), 60);
      }

      • Удалены устаревшие методы getTranslator(), getBundleManager() и getTokenResolver() из Pimcore\Bundle\AdminBundle\Controller\AdminController
    • [System Info & Tools] Информация о Php и состояние Opcache были перенесены в пакет pimcore/system-info-bundle.

    • [File Explorer] Системный проводник файлов был перенесен в пакет pimcore/system-file-explorer.

    • [Web2Print] был перенесен в пакет pimcore/web-to-print-bundle.

      • Конфигурация pimcore:documents:web_to_print была удалена, пожалуйста, используйте вместо нее pimcore_web_to_print в PimcoreWebToPrintBundle.
      • События, связанные с печатью, были перенесены в PimcoreWebToPrintBundle. Пожалуйста, проверьте и адаптируйте пространства имен событий.
      • Устаревший процессор Chrome без заголовков был удален. Пожалуйста, используйте вместо него процессор Chromium.
      • Устаревший процессор WkHtmlToPdf был удален.
      • Представляем процессор Web2print Chromium, который использует chrome-php/chrome (такой же, как для предварительного просмотра страниц), в качестве замены процессора HeadlessChrome, для которого требовался NodeJS.
    • [Персонализация и таргетинг] перенесены в пакет pimcore/personalization.

      • Конфигурация pimcore:таргетинг: была удалена, пожалуйста, используйте вместо нее pimcore_personalization.targeting в PimcorePersonalizationBundle.
      • Таргетинг теперь использует подход, основанный на регистрации, и не будет включен по умолчанию. Добавьте следующую конфигурацию, чтобы включить это:
      pimcore_personalization:  
      targeting:
      enabled: true

    • [Google Marketing] был перенесен в пакет pimcore/google-marketing-bundle.

      • Конфигурация pimcore:services:google была удалена, пожалуйста, используйте вместо нее pimcore_google_marketing в PimcoreGoogleMarketingBundle.
      • [Google] Классы Google\Cse и Google\Cse\Item были удалены.
    • [Рассылка новостей] была перенесена в пакет pimcore/newsletter-bundle.

      • Конфигурация pimcore:newsletter была удалена, пожалуйста, используйте вместо нее pimcore_newsletter в PimcoreNewsletterBundle.
      • События, связанные с рассылкой новостей, были перенесены в PimcoreNewsletterBundle. Пожалуйста, проверьте и адаптируйте пространства имен событий.
      • Идентификаторы служб изменены с pimcore.newsletter на pimcore_newsletter, например pimcore_newsletter.document.newsletter.factory.default.

Ядро

[Команды] :

  • Удалена зависимость webmozarts/console-parallelization, чтобы сделать распараллеливание необязательным. Если вы все еще хотите использовать распараллеливание для консольных команд, пожалуйста, добавьте эту зависимость в свой собственный файл composer.json.
  • Удален устаревший метод Parallelization::configureParallelization().
  • Удален устаревший признак ConsoleCommandPluginTrait.

[Конфигурация] :

  • Pimcore\Config\Config была удалена, см. #12477. Пожалуйста, используйте вместо этого возвращаемый массив, например

    $web2printConfig = Config::getWeb2PrintConfig();  
    $web2printConfig = $web2printConfig['chromiumSettings'];

  • Удален устаревший обратный вызов из LocationAwareConfigRepository. Таким образом, конфигурации в старом формате файла php больше не поддерживаются.

  • Удалена настройка целей записи и каталога хранения в файле окружения. Вместо этого используйте symfony config.

  • Переименованы каталоги по умолчанию из image-thumbnails и video-thumbnails в image_thumbnails и video_thumbnails.

  • Удалены устаревшие сервисы/псевдонимы: Pimcore\Templating\Renderer\TagRenderer, pimcore.cache.adapter.pdo, pimcore.cache.adapter.pdo_tag_aware.

  • Переименуйте конфигурационные файлы из *.yml в *.yaml. Обратите внимание, что теперь в качестве конфигурационного файла мы используем system_settings.yaml, а не system.yml

  • В системных настройках теперь реализован репозиторий Locationawareconfig. Смотрите [руководство по подготовке](../../../Pimcore/Installation_and_Upgrade/Updating_Pimcore/Подготовка к_v11).

  • Конфигурационный узел pimcore.admin и связанные с ним параметры перемещены в AdminBundle непосредственно под узлом pimcore_admin. Пожалуйста, измените использование ваших параметров соответствующим образом, например. вместо pimcore.admin.unauthenticated_routes должно быть pimcore.admin.unauthenticated_routes

  • Был удален устаревший узел конфигурации pimcore.error_handling и связанный с ним параметр pimcore.response_exception_listener.render_error_document.

  • Перенесены настройки hide_edit_image и disable_tree_preview из раздела pimcore в раздел pimcore_admin.

  • Рекомендуемый формат и формат по умолчанию для хранения допустимых языков в system_settings.yaml теперь является массивом, например:

    • en
    • de
pimcore:  
general:
valid_languages:
- en
- de

[CoreBundle] :

  • Пожалуйста, измените путь к ресурсу конфигурации CoreBundle с "@PimcoreCoreBundle/Resources/config/..." на "@PimcoreCoreBundle/config/.." в конфигурациях вашего проекта.
  • Приоритет PimcoreCoreBundle был изменен на -10, чтобы убедиться, что он загружается после пакетов по умолчанию.

[Окружение] :

  • Удалена зависимость symfony/dotenv, чтобы сделать загрузку файлов .env необязательной. пожалуйста, добавьте это требование в свой файл composer.json, если вы все еще хотите использовать файлы .env.
  • Удалена поддержка переменных среды PIMCORE_SKIP_DOTENV_FILE. Вы по-прежнему можете использовать файлы, относящиеся к конкретной среде, такие как .env.test или .env.prod для переменных среды, относящихся к конкретной среде.

[Gotenberg] :

  • Добавлена поддержка Gotenberg в качестве инструмента для создания, преобразования, слияния и т.д. PDF-файлов
  • В [Asset] добавлен адаптер (в качестве альтернативы LibreOffice) для предварительного просмотра ресурсов поддерживаемых типов документов и установки его в качестве адаптера по умолчанию.
  • [Web2Print] Добавлены параметры настройки, конфигурация и процессор для предварительного просмотра и генерации PDF-файлов

[Обслуживание] :

  • Удалены опции --async и --force из команды pimcore:maintenance. Пожалуйста, убедитесь, что в настройках messenger:consume pimcore_maintenance независимо

[Миграции] :

  • Удален executeMigrationsUp из Pimcore\Composer.
  • Pimcore больше не запускает миграции ядра автоматически после обновления composer. Убедитесь, что миграции выполнены, выполнив команду bin/console doctrine:migrations:migrate --prefix=Pimcore\\Bundle\\CoreBundle.

[Наименования] :

  • Переименованы master, blacklist и whitelist в main, blocklist, allowlist

[Разрешения] :

  • Разрешения для классов DataObjects были структурированы более детально, чтобы обеспечить больший контроль. Коллекции полей, блоки объектов, хранилища классификаций и единицы измерения количественных значений теперь имеют свои собственные разрешения.

[Сессии] :

  • Удалены AdminSessionHandler и AdminSessionListener. Сессия теперь обрабатывается Symfony.
  • Удалены SessionConfiguratorInterface и SessionConfigurator, поэтому сервисы с тегом pimcore.session.configurator больше не будут регистрировать пакеты сессий.
  • Удален параметр pimcore.admin.session.attribute_bags.
  • TargetingSessionBagListener - изменена подпись __construct.
  • Для AdminSessionHandler требуется сессия из стека запросов.
  • EcommerceFrameworkBundle\SessionEnvironment больше не загружается из сессии и не сохраняется в нем в режиме cli.
  • Для EcommerceFrameworkBundle\Tracking\TrackingManager требуется сессия из стека запросов.

Ecommerce

[Общее о Ecommerce] :

  • Пакет для электронной коммерции был перенесен в пакет pimcore/ecommerce-bundle. Если вы хотите продолжать использовать платформу электронной коммерции, пожалуйста, запросите пакет в вашем composer.json и установите его после включения в config/bundles.php.
  • Конструктор следующих сервисов был изменен, пожалуйста, соответствующим образом адаптируйте вашу пользовательскую реализацию:
    • IndexService\ProductList\DefaultMysql, IndexService\ProductList\DefaultFindologic.
    • IndexService\Worker\AbstractElasticSearch, IndexService\Worker\DefaultFindologic, IndexService\Worker\DefaultMysql, IndexService\Worker\OptimizedMysql
    • IndexService\Config\AbstractConfig и его подклассы.
    • Tracking\Tracker\Analytics\AbstractAnalyticsTracker и его подклассы.
  • События, связанные с электронной коммерцией, были перенесены. Пожалуйста, проверьте и адаптируйте пространства имен событий.
  • Изменена сигнатура метода [ClassDefinition\LinkGeneratorInterface], вместо Pimcore\Model\DataObject\Concrete используется object.
  • Поддержка Elasticsearch 7 была удалена
  • Параметр конфигурации es_client_params в index_service был удален
  • Удалить устаревшие методы check() и exists() из класса Pimcore\Bundle\EcommerceFrameworkBundle\VoucherService\Reservation

[Сервис индекса] :

  • Пожалуйста, не забудьте перестроить индекс вашего продукта, чтобы убедиться, что изменения применяются соответствующим образом (это актуально для индексов mysql и elasticsearch). В качестве альтернативы вы можете вручную переименовать и удалить o_ из всех столбцов/полей индекса.

[Интерфейсы продукта] :

  • Изменен тип возвращаемого значения в интерфейсе CheckoutableInterface для методов getOSPrice, getOSPriceInfo, getOSAvailabilityInfo, getPriceSystemName, getAvailabilitySystemName, getPriceSystemImplementation, getAvailabilitySystemImplementation, больше не может быть null.

Элементы

[Все] :

  • Добавлены методы setParentId, setType и SetParent в Pimcore\Model\Element\ElementInterface
  • Удален возврат к родительскому идентификатору 1, когда создается элемент с несуществующим родительским идентификатором.
  • Передача параметра $force как логического значения больше недопустима в методах GetById, getByPath, getElementById. Вместо этого, пожалуйста, передайте его как ассоциативный массив (например, ['force' => true]).
  • Изменена сигнатура метода в Pimcore\Model\Element\ElementInterface::save(), это изменяет метод ::save() для всех классов (например, объектов данных и страниц), реализующих интерфейс, включая те, которые наследуются от Concrete/AbstractObject, см. #13207
  • Удален устаревший метод getTotalCount()
  • Удален устаревший метод Pimcore\Model\Element\Service::GetType(), вместо него используется Pimcore\Model\Element\Service::getElementType().
  • Element\Service::getValidKey() удаляет все управляющие/неназначенные, недопустимые и некоторые другие специальные символы (например, табуляции, разрывы строк, ввод формы и вертикальные пробелы).
  • Удален устаревший метод Pimcore\Model\Element\Service::getSaveCopyName(), пожалуйста, используйте вместо него метод Pimcore\Model\Element\Service::getSafeCopyName().

[Объекты данных][Ассеты][Документы] :

  • Значения даты и времени для запланированных задач, журнала приложений и уведомлений теперь отображаются в местном часовом поясе.

[Объекты данных][Документы] :

  • Вызов getChildren/getSiblings для AbstractObject, Document и Asset теперь возвращает выгруженный список. Если просмотр списка не выполняется немедленно, то требуется явно вызвать load().
  • Удалены устаревшие методы GetObject() и setObject() в классах Pimcore\Model\Document\Link и Pimcore\Model\DataObject\Data\Link, пожалуйста, используйте вместо них getElement() и SetElement().

Ассеты

  • Переработан метод Pimcore\Model\Asset::getMetadata, позволяющий отображать все записи метаданных, отфильтрованные по определенному языку. В предыдущей версии языковой фильтр был доступен только тогда, когда в параметрах было указано конкретное имя метаданных. Добавлены подсказки по встроенному типу и соответствующие тесты.
  • Удалены устаревшие методы marshal()/unmarshal() для метаданных, вместо них используются методы normalize()/denormalize().
  • Удалены устаревшие параметры Import from Server и Import from URL.
  • Сообщения об обновлении активов/миниатюр активов теперь направляются в другую очередь.
  • Удален предварительный просмотр виртуальной реальности. Подробности смотрите в #14111
  • Миниатюры изображений: Удалена поддержка использования пользовательских обратных вызовов для преобразования миниатюр.
  • Удалена загрузка ресурсов только через фиксированное пространство имен. Можно настроить пользовательские типы ресурсов.
  • Миниатюры: улучшена сигнатура метода для $thumbnail->getPath(). Теперь вы можете передавать параметры в виде массива $thumbnail->getPath([deferredAllowed=> true,frontend => false]);
  • Удалено устаревшее свойство Pimcore\Model\Asset::$types, вместо него используется GetTypes().

[Оптимизация изображений] :

  • Удалены все сервисы оптимизации изображений (например, PngCrushOptimizer, Jpegoptimizer и т.д.), поскольку оптимизация изображений выполняется с помощью нового пакета spatie/image-optimizer.

[WebDAV] :

  • URL-адрес WebDAV был изменен с https://YOUR-DOMAIN/admin/asset/webdav на https://YOUR-DOMAIN/asset/webdav

    В результате этого изменения в вашей конфигурации nginx требуются следующие изменения:

    # Assets  
    ....
    location ~* ^(?!/admin)(.+?)....

    Новая:

    # Assets  
    ....
    location ~* ^(?!/admin|/asset/webdav)(.+?)....


Объекты данных

  • Удалено "generate type declarations" в определениях классов

  • Удален method_exists на уровне bc, пожалуйста, используйте вместо него соответствующие интерфейсы. Подробности смотрите в #9571

  • isEqual() для расширенных типов реляционных полей больше не проверяет равенство типов метаполей, см. #12595

  • Добавлены возвращаемые типы в методы настройки. Подробнее см. #12185

  • Псевдоним ReverseManyToManyObjectRelation удален, пожалуйста, используйте вместо него ReverseObjectRelation.

  • Изменено поведение по умолчанию: методы getByXXX в классе Concrete теперь возвращают объекты и варианты, если больше ничего не указано.

  • Изменено значение по умолчанию $objectTypes, чтобы включать варианты в определенных сценариях.

  • Удален устаревший URL предварительного просмотра в редакторе классов.

  • Удалена функциональность sql filter для сетки объектов данных

  • Загрузка неконкретных объектов с классом Concrete больше невозможна

  • Удалены функции настройки для вычисляемых значений, поскольку они все равно не использовались.

  • Удален префикс o_ для свойств объекта данных и столбцов базы данных.

  • Из-за удаления префикса o_ имена свойств classTitle, hasChildren, siblings, hasSiblings, childrenSortBy, childrenSortOrder, versionCount, dirtyLanguages и dirtyFields изменены.

  • Текстовые типы данных теперь присваивают соответствующим столбцам базы данных значение null вместо `` (пустая строка), когда они пусты.

  • Метод Concrete::getClass() выдает исключение NotFoundException, если класс для объекта не найден.

  • Подсказки по изменению типа в Pimcore\Model\DataObject\QuantityValue\QuantityValueConverterInterface::convert():

    public function convert(QuantityValue $quantityValue, Unit $toUnit): QuantityValue;  

    public function convert(AbstractQuantityValue $quantityValue, Unit $toUnit): AbstractQuantityValue;  

  • Добавлен глобальный переключатель языков для локализованных полей

  • Добавлена новая вспомогательная функция наследования данных DataObject\Service::useInheritedValues

  • Теперь можно добавлять видео-ресурсы непосредственно в видео, доступное для редактирования в классе

  • Удалено управление кнопками для определения макета объектов данных.

[Определения классов] :

  • Распознаватель классов больше не перехватывает исключения.

[ClassSavedInterface] :

  • Удален слой bc method_exists. Пожалуйста, добавьте соответствующий интерфейс ClassSavedInterface в свои пользовательские определения полей. Для получения более подробной информации ознакомьтесь с примечаниями к обновлению 10.6.0.

[Экспорт в CSV] :

  • Изменена кодировка табличных типов данных с base64_encoded на json_encode.

[CustomLayouts] :

  • Удалена команда pimcore:deployment:custom-layouts-rebuild, поскольку пользовательские макеты переносятся в LocationAwareConfigRepository.

[Отношения] :

  • Добавлена возможность встроенной загрузки ресурсов из отношений
  • Добавлено диалоговое окно подтверждения к пустой кнопке отношения и добавлена возможность отключить очистку отношений в макете класса.

[UrlSlug] :

  • Удален столбец index и индекс index из таблицы object_url_slugs, поскольку он нигде не использовался.
  • Разрешение на обработку неопубликованного резервного документа теперь используется по умолчанию, удалены соответствующие параметры конфигурации и способы использования (allow_processing_unpublished_fallback_document, ElementListener::FORCE_ALLOW_PROCESSING_UNPUBLISHED_ELEMENTS). Для получения более подробной информации, пожалуйста, смотрите #10005

Документы

  • Удалена функция ввода html-тегов metadata в разделе настроек документа.
  • Удалено свойство $types из Pimcore\Model\Document. Вместо этого используйте метод GetTypes.
  • Удален pimcore:document:types из конфигурации. Типы будут представлены ключами в type_definitions:map
  • Удален устаревший метод Pimcore\Routing\Dynamic\DocumentRouteHandler::addDirectRouteDocumentType(), пожалуйста, используйте вместо него конфигурацию pimcore.documents.type_definitions.map.%document_type%.direct_route.
  • Добавлена команда pimcore:documents:cleanup для удаления документов с указанными типами и удаления связанных таблиц типов документов, что полезно в таких случаях, как удаление документов без заголовка или страниц/контейнеров web2print после удаления, см. Документы
  • Удалено поле attributes из редактируемой ссылки.
  • Устаревший WkHtmlToImage был удален.
  • Добавлен второй логический параметр $validate в метод setContentMainDocumentId(). Это ограничит возможность привязки страниц в качестве основных документов контента друг к другу. Для получения более подробной информации, пожалуйста, смотрите #12891
  • Переработан pimcore.documents.valid_tables, чтобы он был опцией в каждом определении типа документа (например, pimcore.documents.type_definitions.map.%document_type%.valid_table) вместо собственного узла массива.
  • При перемещении документа в дереве больше не отображается запрос на создание перенаправлений. Создание перенаправления теперь настраивается с помощью pimcore:redirects:auto_create_redirects. Эта конфигурация включает в себя URLSlugs и Pretty URLs.
pimcore_seo:  
redirects:
auto_create_redirects: true

  • Изменена конфигурация типов документов. Теперь можно изменять навигацию и многое другое для каждого типа документа в конфигурации.
    documents:  
type_definitions:
map:
page:
class: \Pimcore\Model\Document\Page
translatable: true
valid_table: 'page'
direct_route: true
translatable_inheritance: true
children_supported: true
only_printable_childrens: false
predefined_document_types: true

[Areabricks] :

  • Расположение шаблона по умолчанию для AbstractTemplateAreabrick теперь является TEMPLATE_LOCATION_GLOBAL.

[Контроллеры] :

  • Удален устаревший SensioFrameworkExtraBundle, который влияет на следующее:
    • Аннотация @Template должна быть заменена атрибутом #[Template]. Угадывание шаблона на основе controller::action больше не поддерживается.
    • Аннотация @ResponseHeader должна быть заменена атрибутом #[ResponseHeader]. Удален устаревший Pimcore\Controller\Configuration\ResponseHeader.
    • Аннотация @ParamConverter должна быть заменена атрибутом #[DataObjectParam].
  • FrontendController::renderTemplate(): Изменена видимость на protected.

[Chromium] :

  • Добавлена поддержка запуска chromium в контейнере Docker и работы через websocket для web2print и предварительного просмотра страниц, а также для запуска его с помощью локального двоичного файла.

[DocType] :

  • staticGeneratorEnabled теперь имеет логическое значение вместо целого

[Редактируемые элементы документа] :

  • Удален method_exists bc layer для getDataEditmode(), rewriteIds() и load(), пожалуйста, используйте соответствующие интерфейсы EditmodeDataInterface, IdRewriterInterface и LazyLoadingInterface вместо этого.

[Навигация] :

  • Вызов метода Pimcore\Navigation\Builder::getNavigation() с использованием дополнительных аргументов выполняется следующим образом
  • Методы Pimcore\Navigation::setDefaultPageType, Pimcore\Navigation::getDefaultPageType, Pimcore\Navigation\Container::_sort() и Pimcore\Navigation\Page::_normalizePropertyName()` были помечены как внутренние.

[Сайты] :

  • Вызов абсолютного пути с сайта больше невозможен. Если будет вызван абсолютный путь, вместо него будет возвращена ошибка 404.
  • Идентификатор сайта по умолчанию был изменен с default на 0. Пожалуйста, соответствующим образом обновите настройки, используя идентификатор сайта по умолчанию.

[Редактируемые элементы видео] :


Инфраструктура

[Параметры PHP] :

  • Удалены настройки следующих параметров: memory_limit, max_execution_time, max_input_time и display_errors.

[PHP] :

  • Минимальная поддерживаемая версия PHP теперь 8.1, добавлена поддержка версии 8.2

[Symfony] :

  • Замените устаревший Symfony\Component\HttpFoundation\RequestMatcher на Symfony\Component\HttpFoundation\ChainRequestMatcher

Инструменты

[Логгер приложения] :

  • Удалена устаревшая константа PIMCORE_LOG_FILEOBJECT_DIRECTORY, поскольку для сохранения/получения файловых объектов используется flysystem. Пожалуйста, не забудьте адаптировать свой код и перенести файловые объекты вручную.
  • В названиях архивных таблиц теперь указывается год-месяц, а не месяц-год, см. #8237.

[Кэш] :

  • Удалена зависимость psr/simple-cache из-за отсутствия использования в ядре.
  • Ответы, содержащие заголовок Cache-Control: no-store, больше не будут кэшироваться полностраничным кэшем.
  • Удален помощник по кэшированию Pimcore\Cache\Runtime и Pimcore\Cache\RuntimeCacheTrait. Кэш времени выполнения теперь обрабатывается Pimcore\Cache\RuntimeCache.

[Консоль] :

  • Видимость методов execInBackgroundUnix и execInBackgroundWindows изменена с protected на private, а для getSystemEnvironment - с public на private.

[Email] :

  • Удалены устаревшие методы setBodyHtml(), setBodyText(), createAttachment() и setSubject(). Используется html(),
  • Изменен параметр league/html-to-markdown на ^5.1.

[Переводы] :

  • Домены переводов должны быть зарегистрированы, чтобы считаться действительными. Если вы используете пользовательские домены
    • site_1
    • site_2
pimcore:  
translations:
domains:
- site_1
- site_2

  • Добавлено средство очистки html от Symfony для метода \Pimcore\Model\Translation\Dao::save.

[Рабочие процессы] :

  • Удалены классы Pimcore\Model\Workflow, Pimcore\Model\Workflow\Dao, Pimcore\Model\Workflow\Listing\Dao и Pimcore\Model\Workflow\Listing.


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