Upgrading Pimcore from Version 10.x to Version 11
Tasks to Do Prior the Update
Migrate System Settings
System settings are using LocationAwareConfigRepository in Pimcore 11. To keep your specific settings, please follow the steps below:
Make sure to change the type from
json when upgrading to 11, since the type
json_array is removed in doctrine/dbal 3.
Use the following script to list the columns which contains the
mysqldump -u <USERNAME> -p <PASSWORD> --no-data <DATABASENAME> | grep -i json_array
Appearance & Branding
Appearance & Branding settings will be separated from the system settings in Pimcore 11 and stored in
var/config/admin_system_settings/admin_system_settings.yaml by default. Please copy every relevant settings from
var/config/admin_system_settings/admin_system_settings.yaml to keep your settings.
To save these settings into the settings store, you can use the following configuration:
Please copy all relevant settings from
To save system settings into the settings store, please add the following to your configuration:
Configuration Storage Settings
As some features were moved to separate bundles, their configuration storage settings might need to be moved. This is a two steps process: 1) Remove settings before the update. 2) Re-Add settings after the extracted bundles installation.
The relevant configs are:
# type: 'settings-store'
# type: 'settings-store'
# type: 'settings-store'
If you are using the Web2Print functionality, set the flag "Enable Web2Print documents in default documents view" to true to ensure the PimcoreWebToPrintBundle gets installed by default.
If you are not using Web2Print functionality, set the flag to false.
Please add all html tags with attributes you want to allow to the html_sanitizer like described here
Update Pimcore via Composer
Update Pimcore to Pimcore 11 via composer statement
composer require -W pimcore/pimcore:^11.0 pimcore/admin-ui-classic-bundle.
Depending on your setup, it might be necessary to include additional dependencies in the update statement and/or to clean up the
composer.lock file and the
After composer, some tasks like
bin/console assets:install might fail due to necessary additional adaptions before the Symfony container can be built again. For more info, see the following Tasks section.
Tasks to Do After the Update
Register the admin-ui-classic-bundle in Kernel (and adapt method signature if necessary):
public function registerBundlesToCollection(BundleCollection $collection): void
// pimcore bundles
$collection->addBundle(new \Pimcore\Bundle\AdminBundle\PimcoreAdminBundle(), 60);
Some Code Changes
config/packages/security.yamlto the latest format. As reference use security.yaml of our skeleton.
- Update references from
- especially in
config/routes.yaml(you probably also need to change
- especially in
Install Extracted Bundles via Composer if Necessary
Add the extracted bundles (such as PimcoreEcommerceFrameworkBundle or PimcorePersonalizationBundle) via composer if necessary.
composer require pimcore/system-info-bundle pimcore/file-explorer-bundle pimcore/personalization-bundle pimcore/google-marketing-bundle pimcore/web-to-print-bundle pimcore/ecommerce-framework-bundle pimcore/newsletter-bundle
Skip bundles as per your requirements.
Activate Extracted Bundles in
config/bundles.php if Necessary
config/bundles.php and add all the needed extracted bundles to the array:
\Pimcore\Bundle\EcommerceFrameworkBundle\PimcoreEcommerceFrameworkBundle::class => ['all' => true],
\Pimcore\Bundle\PersonalizationBundle\PimcorePersonalizationBundle::class => ['all' => true],
\Pimcore\Bundle\GlossaryBundle\PimcoreGlossaryBundle::class => ['all' => true],
\Pimcore\Bundle\SeoBundle\PimcoreSeoBundle::class => ['all' => true],
\Pimcore\Bundle\SimpleBackendSearchBundle\PimcoreSimpleBackendSearchBundle::class => ['all' => true],
\Pimcore\Bundle\CustomReportsBundle\PimcoreCustomReportsBundle::class => ['all' => true],
\Pimcore\Bundle\GoogleMarketingBundle\PimcoreGoogleMarketingBundle::class => ['all' => true],
\Pimcore\Bundle\ApplicationLoggerBundle\PimcoreApplicationLoggerBundle::class => ['all' => true],
\Pimcore\Bundle\WebToPrintBundle\PimcoreWebToPrintBundle::class => ['all' => true],
\Pimcore\Bundle\TinymceBundle\PimcoreTinymceBundle::class => ['all' => true],
\Pimcore\Bundle\StaticRoutesBundle\PimcoreStaticRoutesBundle::class => ['all' => true],
\Pimcore\Bundle\NewsletterBundle\PimcoreNewsletterBundle::class => ['all' => true],
\Pimcore\Bundle\WordExportBundle\PimcoreWordExportBundle::class => ['all' => true],
\Pimcore\Bundle\XliffBundle\PimcoreXliffBundle::class => ['all' => true],
\Pimcore\Bundle\FileExplorerBundle\PimcoreFileExplorerBundle::class => ['all' => true],
\Pimcore\Bundle\SystemInfoBundle\PimcoreSystemInfoBundle::class => ['all' => true],
Remove bundles as per your requirements.
Configuration Storage Settings - Part 2
Reactivate the configuration storage settings for the extracted bundles as needed:
As soon as the Symfony container can be built again, you can execute all the migrations:
If you do not use the Web2Print functionality, then please make sure to run the following command and queries to clean up your system:
bin/console pimcore:documents:cleanup printpage printcontainer
DELETE FROM `users_permission_definitions` WHERE `key` = 'web2print_settings';
UPDATE `users` SET `permissions`=REGEXP_REPLACE(`permissions`, '(?:^|,)web2print_settings(?:$|,)', '') WHERE `permissions` REGEXP '(?:^|,)web2print_settings(?:$|,)';
If you do not use the Newsletter functionality, then please make sure to run the following command to clean up your system:
bin/console pimcore:documents:cleanup newsletter
Remove orphaned custom settings
Since the facedetect support was removed in v11, we recommend to remove the corresponding custom settings in the database. You can do that by running the following commands:
bin/console pimcore:assets:remove-custom-setting faceCoordinates
bin/console pimcore:assets:remove-custom-setting disableFocalPointDetection
bin/console pimcore:assets:remove-custom-setting disableImageFeatureAutoDetection
Rebuild classes, objectBricks, fieldCollections and customLayouts
Make sure you ran the following commands to rebuild the classes, objectBricks, fieldCollections and customLayouts:
bin/console doctrine:migration:exec 'Pimcore\Bundle\CoreBundle\Migrations\Version20230412105530'
var/config/system.yamlafter migrating all settings.
- WebDav: please keep in mind that the nginx configuration has changed due to the WebDav path being moved. Please adapt your configuration accordingly by following the instruction under the WebDav section in the upgrade notes page.
Update Symfony Messenger Worker Configuration
With Pimcore 11, certain Symfony Messenger tasks were moved to a separate receiver. Make sure you adapt your Symfony Messenger worker configuration (e.g. your supervisor configuration here so that all receivers are consumed. Newly added consumers are: