Skip to main content
Version: Next

Upgrade Notes

Upgrade to 2026.3.0

Deprecations

The bundle's own Mercure hub and the modal protocol built on it only served the classic admin UI and the legacy Portal Engine frontend. Deprecated, will be removed in 2027.1:

  • Controller\FileEditControllerTrait, Service\ModalRenderService and Model\Response\DirectEditModal. Drive Direct Edit through a Service\Studio\DirectEditService instance configured with your own PermissionServiceInterface instead, see Integrate into Custom Application.
  • Service\PublishService, Service\MercureUrlService, the topic http://www.pimcore.com/direct-edit/client-upload/user/<userId> and the methods that publish it on ClientCommunicationService.
  • pimcore_direct_edit.mercure_settings and parameters.mercure.hub.*. The legacy hub client now takes the hub's server URL and JWT key from pimcore_studio_backend.mercure_settings, so both can be dropped unless you still run a legacy frontend. That one needs mercure_settings.client_side_url wherever the hub does not answer on https://<host>/hub/.well-known/mercure, see Mercure Setup. mercure_settings.jwt_cookie_host and jwt_cookie_strictness have had no effect since 2026.1.
  • Service\Permission\PimcoreBackendPermissionService, unreachable since the Studio backend bundle became a hard dependency. StudioPermissionService is the default, and PERMISSION_NAME now lives on PermissionServiceInterface.

Upgrade to 2026.2.3

Frontend Build Ships as a Packaged Archive

The compiled Studio frontend is no longer committed as an expanded src/Resources/public/studio/build/ directory. It now ships as a single archive (build-dist/build-<id>.zip) that is extracted into src/Resources/public/studio/build/ automatically during cache warmup.

pimcore/studio-ui-bundle ^2026.2.1 is now required, as it provides the archive extraction.

Note: Read-only filesystem deployments must run bin/console cache:warmup (or cache:clear) during the build/deploy phase while the bundle directory (usually under vendor/) is still writable. Standard Pimcore deployments already do this. When assets:install runs in copy mode, run cache:warmup before it, otherwise no frontend assets are copied. If the filesystem becomes read-only before the first warmup, the bundle fails with BuildArchiveNotWritableException because there is no build to serve.

Upgrade to 2026.1.0

  • Added support for PHP 8.5.
  • Removed support for PHP 8.3 and Symfony v6.

Removed Admin Classic / ExtJS Support

  • PimcoreDirectEditBundle no longer implements PimcoreBundleAdminClassicInterface and no longer uses BundleAdminClassicTrait. The getJsPaths() and getCssPaths() methods have been removed.
  • All ExtJS-based frontend assets have been deleted:
    • src/Resources/public/js/startup.js
    • src/Resources/public/js/modal.js
    • src/Resources/public/js/bootstrap-modal.js
    • src/Resources/public/css/style.css

Removed Controllers

  • AssetEditController has been removed (was Admin Classic based).
  • MercureController has been removed (was Admin Classic based).
  • StudioRouteLoader has been removed; Studio routing is now handled directly via configuration.

Studio UI Implementation

  • Full Studio UI support has been implemented. The bundle now ships with a React/TypeScript frontend under assets/studio/.

  • New Studio backend controllers added under src/Controller/Studio/:

    • CancelEditController
    • ConfirmUploadController
    • GenerateLinkController
    • GetStatusController (replaces the former DefaultController)
    • ResolveConflictController
  • New Studio event classes added:

    • Pimcore\Bundle\DirectEditBundle\Event\Studio\DirectEditLinkEvent
    • Pimcore\Bundle\DirectEditBundle\Event\Studio\DirectEditStatusEvent

    These classes exist but the bundle does not dispatch them anywhere. There is currently no way to hook into a direct edit request through the event system.

Interface & API Changes

  • ClientController is now marked @internal.
  • ClientController constructor: ClientCommunicationService $clientCommunicationService dependency has been replaced by DirectEditEventNotifierInterface $notificationService.
  • ClientCommunicationService constructor: a new optional ?string $clientHostUrl parameter has been added as the last argument.
  • The internal method call ClientCommunicationService::sendStartLocalEditingEvent() used inside ClientController has been replaced by DirectEditEventNotifierInterface::notifyStartEditing().
  • ClientController upload handler now calls DirectEditEventNotifierInterface::notifyUploadComplete() instead of ClientCommunicationService::sendClientUploadEvent().
  • Both notifyStartEditing() and notifyUploadComplete() now return string[] (warnings for non-fatal failures), and the JSON responses from ClientController will include a warnings key when warnings are present.

New Interfaces

The following new interfaces have been added (all marked @internal):

  • Pimcore\Bundle\DirectEditBundle\Service\DirectEditEventNotifierInterface: abstraction over event notification channels, with methods:
    • notifyStartEditing(AssetToken $assetToken): string[]
    • notifyUploadComplete(AssetToken $assetToken): string[]
  • Pimcore\Bundle\DirectEditBundle\Service\Studio\DirectEditServiceInterface: Studio backend service interface with methods: generateLink(), cancelEdit(), confirmUpload(), resolveConflict(), getStatus().
  • Pimcore\Bundle\DirectEditBundle\Hydrator\DirectEditLinkHydratorInterface: hydrates DirectEditLink schema objects.
  • Pimcore\Bundle\DirectEditBundle\Hydrator\DirectEditStatusHydratorInterface: hydrates DirectEditStatus schema objects.

Update to Version 2.5

  • It is now possible to define the JWT Cookie Host and strictness via configuration.

Update to Version 2.1

Please be aware that version 2.1 of the bundle drops support for Pimcore 10.6. Make sure to upgrade to Pimcore 11.1 or higher before updating the bundle.