Upgrade Notes
Pimcore 11.1.0
Elements
[All]:
- Properties are now only updated in the database with dirty state (when calling
setProperties
orsetProperty
). - Added hint for second parameter
array $params = []
toElement/ElementInterface::getById
Pimcore\Helper\CsvFormulaFormatter
has been deprecated. UseLeague\Csv\EscapeFormula
instead.
[Assets]:
- Asset Documents background processing (e.g. page count, thumbnails & search text) can be disabled with config:
pimcore:
assets:
document:
thumbnails:
enabled: false #disable generating thumbnail for Asset Documents
process_page_count: false #disable processing page count
process_text: false #disable processing text extraction
scan_pdf: false #disable scanning PDF documents for unsafe JavaScript. - Video Assets spherical metadata is now calculated in the backfground instead of on load.
[Data Objects]:
- Property
$fieldtype
of thePimcore\Model\DataObject\Data
class is deprecated now. Use thegetFieldType()
method instead. - Method
getSiblings()
output is now sorted based on the parent sorting parameters (same asgetChildren
) instead of alphabetical. - Input fields
CheckValidity
checks the column length.
[Documents]:
- Removed
allow list
filter fromPimcore\Model\Document\Editable\Link
to allow passing any valid attributes in the config. - Property
Pimcore\Navigation\Page::$_defaultPageType
is deprecated.
General
[Authentication]:
The tokens for password reset are now stored in the DB and are one time use only (gets expired whenever a new one is generated or when consumed).
- [Static Page Generator]: Static pages can be generated based on sub-sites main domain using below config:
and adapting NGINX config:
pimcore:
documents:
static_page_router:
use_main_domain: true #generates pages in path /public/var/tmp/pages/my-domain.com/en.htmlmap $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;
}
[Core Cache Handler]:
- Remove redundant cache item tagging with own key.
[Installer]:
- Passing
--install-bundles
as empty option now installs the required bundles.
[Maintenance Mode]:
- Maintenance mode check is handled via
tmp_store
in database. Using maintenance mode files is deprecated. - Deprecated following maintenance-mode methods in
Pimcore\Tool\Admin
:activateMaintenanceMode
, useMaintenanceModeHelperInterface::activate
instead.deactivateMaintenanceMode
, useMaintenanceModeHelperInterface::deactivate
instead.isInMaintenanceMode
, use `MaintenanceModeHelperInterface::isActive instead.isMaintenanceModeScheduledForLogin
,scheduleMaintenanceModeOnLogin
,unscheduleMaintenanceModeOnLogin
will be removed in Pimcore 12.
Pimcore 11.0.7
- Putting
null
to thePimcore\Model\DataObject\Data::setIndex()
method is deprecated now. Only booleans are allowed.
Pimcore 11.0.0
API
[General] :
- Attention: Added native php types for argument types, property types, return types and strict type declaration where possible. Double check your classes which are extending from Pimcore classes and adapt if necessary.
[Bootstrap] :
- Relying on
Pimcore\Bootstrap::bootstrap()
for autoloading classes will not work anymore. - Removed unused constant
PIMCORE_APP_BUNDLE_CLASS_FILE
[Events] :
- Event
pimcore.element.note.postAdd
has been removed. Usepimcore.note.postAdd
instead. Note: The event type changed fromElementEvent
toModelEvent
. - Report Event
pimcore.admin.reports.save_settings
has been renamed topimcore.reports.save_settings
. - Moved
SEARCH_LIST_BEFORE_FILTER_PREPARE
,SEARCH_LIST_BEFORE_LIST_LOAD
,SEARCH_LIST_AFTER_LIST_LOAD
,QUICKSEARCH_LIST_BEFORE_LIST_LOAD
andQUICKSEARCH_LIST_AFTER_LIST_LOAD
events fromPimcore\Bundle\AdminBundle\Event\AdminEvents
toPimcore\Bundle\SimpleBackendSearchBundle\Event\AdminSearchEvents
. AdminEvents::ELEMENT_PERMISSION_IS_ALLOWED
has been renamed toPimcore\Event\ElementEvents::ELEMENT_PERMISSION_IS_ALLOWED
.
[Installer] :
- Removed
--ignore-existing-config
option from thepimcore:install
command. Thesystem.yaml
file is not used anymore and therefore this flag became obsolete. See preparing guide - Changed the return type of
Pimcore\Extension\Bundle\Installer\InstallerInterface::getOutput
toBufferedOutput | NullOutput
. - Adding
BundleSetupEvent
Event. Bundles that are available for installation can be customized in the installing process via an Eventlistener or EventSubscriber. - Bundles can be added and removed. You can set a flag if you want to recommend the bundle.
[Logging] :
- Removed constant
PIMCORE_PHP_ERROR_LOG
- Bumped
monolog/monolog
to ^3.2 andsymfony/monolog-bundle
to ^3.8 (which adds support for monolog v3). Please adapt your custom implementation accordingly, eg. log records are nowLogRecord
Objects instead of array. - Removed the ability to use the
pimcore_log
GET parameter.
[Miscellaneous] :
- Marked
Pimcore\Model\User\AbstractUser
andPimcore\Model\User\UserRole
classes as abstract. - Marked
Pimcore\File
as internal. This class shouldn't be used anymore, useSymfony\Component\Filesystem
instead.
[Further Removed API Features] :
- Removed
getChilds
,setChilds
andhasChild
usegetChildren
,setChildren
andhasChildren
instead. - Removed PhpArrayTable class
- Removed deprecated
PhpArrayFileTable
. - Removed
Pimcore\Db\Helper::insertOrUpdate()
method, please usePimcore\Db\Helper::upsert()
instead. - Removed deprecated
Pimcore\Db\ConnectionInterface
interface,Pimcore\Db\Connection
class andPimcore\Db\PimcoreExtensionsTrait
trait. - Removed
JsonListing
, please see #12877 for details. - Deprecated MissingDependencyException has been removed.
- Removed deprecated getMasterRequest() in favor of getMainRequest().
- Removed the deprecated method
Kernel::getRootDir()
, useKernel::getProjectDir()
instead. - Removed methods
Pimcore\Tool\Admin::isExtJS6()
,\Pimcore\Tool\Admin::getLanguageFile()
,\Pimcore\Tool::exitWithError()
. - Removed the following methods from
Pimcore\File
:mkdir
,put
,getFileExtension
,setDefaultMode
,getDefaultMode
,setDefaultFlags
andrename
.
[Further relevant Third Party Dependency Upgrades] :
- Bumped
friendsofsymfony/jsrouting-bundle
to version^3.2.1
- Bumped Symfony packages to "^6.2".
- Cleanup unused Symfony packages from composer.json, eg.
form
,web-link
, see also #13097 - Bumped
mjaschen/phpgeo
to "^4.0". - Bumped
codeception/codeception
version to ^5.0. Now, Pimcore is using a new directory structure for tests (Codeception 5 directory structure). For details, please see #13415 - Bumped
matomo/device-detector
to ^6.0. - Bumped minimum requirement of
presta\sitemap-bundle
to^3.3
, dropped support forv2
and removed related BC Layer. - Bumped
league/flysystem-bundle
minimum requirement to ^3.0 (which introducesdirectoryExists()
,has()
methods and fixes support fordirectory_visibility
configuration option). Please bump the Flysystem Adapters requirement accordingly to^3.0
in your projectcomposer.json
.
Admin UI
[General] :
- Removed
adminer
as built-in database management tool. - Removed deprecated Admin Event classes:
Pimcore\Event\Admin\*
,Pimcore\Event\AdminEvents
,Pimcore\Event\Model\*
. - Changed the navigation building process. It is easier to add main and submenus. For details please see Adding Custom Main Navigation Items
[Authentication] :
- Removed support old authentication system
- Removed BruteforceProtection, use Symfony defaults now
- Removed PreAuthenticatedAdminToken
- Admin Login Events
- Removed
AdminEvents::LOGIN_CREDENTIALS
event. - Removed
AdminEvents::LOGIN_FAILED
event. UseSymfony\Component\HttpFoundation\Request\LoginFailureEvent
instead.
- Removed
- Removed Pimcore Password Encoder factory,
pimcore_admin.security.password_encoder_factory
service andpimcore.security.factory_type
config. - Removed deprecated method
Pimcore\Bundle\AdminBundle\Security\User::getUsername()
, usegetIdentifier()
instead. - Deprecated method
Pimcore\Tool\Authentication::authenticateHttpBasic()
has been removed. - Deprecated method
Pimcore\Tool\Authentication::authenticatePlaintext()
has been removed.
[JS] :
- Packaged some JS libraries with encore
- Removed deprecated JS functions (
ts()
andpimcore.helpers.addCsrfTokenToUrl()
) - Removed Plugin Broker BC layer for JS events
[Security] :
- Enabled Content Security Policy by default.
- Implemented Symfony HTML sanitizer for WYSIWYG editors. Please make sure to sanitize your persisted data with help of this script.
Also, when using API to set WYSIWYG data, please pass encoded characters for html entities
<
,>
,&
etc. The data is encoded by the sanitizer before persisting into db and the same encoded data will be returned by the API. For configuration details see also WYSIWYG config
Bundles
[Bundles General] :
- Removed support for loading bundles through
extensions.php
. - Removed Extension Manager(
Tools -> Bundles & Bricks
option) from Admin UI. - Removed commands:
pimcore:bundle:enable
,pimcore:bundle:disable
. - Removed
dontCheckEnabled
config support from Areablock editable. - The default behaviour of asset install and
Composer::installAssets
is changed, which means that the files (like css, js) will be copied instead of symlinked. So, you have to run the commandbin/console assets:install
for every change. Behavior can be adapted incomposer.json
as follows:
"extra": {
"symfony-assets-install": "relative"
}
[Extracted Core Functionality] :
-
Functionality that was moved into its own bundle inside pimcore/pimcore repository and needs to be enabled during Pimcore install or in
config/bundles.php
:-
[Application Logger] Application logger has been moved into
PimcoreApplicationLoggerBundle
. Please pay attention to the new namespaces for the classes from this bundle. -
[CustomReports] have been moved into PimcoreCustomReportsBundle
- Config
pimcore:custom_reports
has been removed, please usepimcore_custom_reports:
in the PimcoreCustomReportsBundle insteand.
- Config
-
[Glossary] has been moved into PimcoreGlossaryBundle
pimcoreglossary()
tag has been removed, please use thepimcore_glossary
twig filter.- Config
pimcore:glossary
has been removed, please usepimcore_glossary:
in the PimcoreGlossaryBundle instead.
-
[Search] has been moved into PimcoreSimpleBackendSearchBundle
- The search functionality has been extracted to its own bundle (
PimcoreSimpleBackendSearchBundle
) - The
pimcore:search-backend-reindex
command has been moved to the search bundle - Search icons all over Pimcore won't be available without the search bundle
- The inline search feature for some relations won't be available without the search bundle
- The "advanced" GDPR search has also been moved. We provide a basic search to cover the fundamental functionality if the search bundle isn't available.
- The asset, object, document and quick search have been moved to the search bundle
- All backend-search related files have been moved to the search bundle (please check custom implementations if you rely on any backend-search component!)
- Added additional messenger transport for backend search (
pimcore_search_backend_message
) - Moved
FullTextIndexOptimizeTask
command to SimpleBackendSearchBundle. According to that the namespace changed fromPimcore\Maintenance\Tasks\FullTextIndexOptimizeTask
toPimcore\Bundle\SimpleBackendSearchBundle\Task\Maintenance\FullTextIndexOptimizeTask
.
- The search functionality has been extracted to its own bundle (
-
[SEO] Document Editor, Redirects, Sitemaps, robots.txt and HTTP Errors has been moved into PimcoreSeoBundle
-
[Staticroutes] has been moved into PimcoreStaticRoutesBundle
- Config
pimcore:staticroutes:
has been removed, please usepimcore_static_routes:
in the PimcoreStaticRoutesBundle instead.
- Config
-
[UUID] has been moved into PimcoreUuidBundle
- Config
pimcore:general:instance_identifier
has been removed, please usepimcore_uuid:instance_identifier
in the PimcoreUuidBundle instead. Please runbin/console config:dump pimcore_uuid
to see more about the instance identifier config after installing the bundle.
- Config
-
[WordExport] has been moved into PimcoreWordExportBundle
-
[Xliff Translation] Import/Export and related Events have been moved into PimcoreXliffBundle. Please check and adapt the Events' namespaces.
-
[WYSIWYG-Editor] The default editor changed from
CKEditor
toTinyMCE
and has been moved into PimcoreTinymceBundle. Please adapt custom configuration and extend the html sanitizer for supporting the required html elements in wysiwyg editor.
-
-
Functionality that was moved into its own bundle and own repository and needs to installed via composer as well as activated in
config/bundles.php
:- [AdminBundle] Admin Bundle has been moved to
pimcore/admin-ui-classic-bundle
package.- Please require in your project composer.json file and register the bundle in Kernel:
public function registerBundlesToCollection(BundleCollection $collection): void
{
// pimcore bundles
$collection->addBundle(new \Pimcore\Bundle\AdminBundle\PimcoreAdminBundle\PimcoreAdminBundle(), 60);
}- Removed deprecated methods
getTranslator()
,getBundleManager()
andgetTokenResolver()
from thePimcore\Bundle\AdminBundle\Controller\AdminController
- [System Info & Tools] Php Info and Opcache Status has been moved into
pimcore/system-info-bundle
package. - [File Explorer] System File explorer has been moved to
pimcore/system-file-explorer
package. - [Web2Print] has been moved to
pimcore/web-to-print-bundle
package.- Config
pimcore:documents:web_to_print
has been removed, please usepimcore_web_to_print
in the PimcoreWebToPrintBundle instead. - Print related Events have been moved into PimcoreWebToPrintBundle. Please check and adapt the Events' namespaces.
- Deprecated HeadlessChrome Processor has been removed. Please use Chromium Processor instead.
- Deprecated WkHtmlToPdf Processor has been removed.
- Introducing Web2print processor
Chromium
that usechrome-php/chrome
(same as the page previews), as replacement of HeadlessChrome processor which required NodeJS.
- Config
- [Personalization and targeting] has been moved to
pimcore/personalization
package.- Config
pimcore:targeting:
has been removed, please usepimcore_personalization.targeting
in the PimcorePersonalizationBundle instead. - Targeting is now using the opt-in approach and will not be enabled by default. Add following config to enable it:
pimcore_personalization:
targeting:
enabled: true - Config
- [Google Marketing] has been moved to
pimcore/google-marketing-bundle
package.- Config
pimcore:services:google
has been removed, please usepimcore_google_marketing
in the PimcoreGoogleMarketingBundle instead. - [Google] Classes Google\Cse and Google\Cse\Item have been removed.
- Config
- [Newsletter] has been moved to
pimcore/newsletter-bundle
package.- Config
pimcore:newsletter
has been removed, please usepimcore_newsletter
in the PimcoreNewsletterBundle instead. - Newsletter related Events have been moved into PimcoreNewsletterBundle. Please check and adapt the Events' namespaces.
- Service ids changed from
pimcore.newsletter
topimcore_newsletter
e.g.pimcore_newsletter.document.newsletter.factory.default
- Config
- [AdminBundle] Admin Bundle has been moved to
Core
[Commands] :
- Removed
webmozarts/console-parallelization
dependency to make parallelization optional. If you still want to use parallelization for console commands, please add the dependency to your owncomposer.json
. - Removed the deprecated
Parallelization::configureParallelization()
method. - Removed the deprecated trait
ConsoleCommandPluginTrait
.
[Configuration] :
Pimcore\Config\Config
has been removed, see #12477. Please use the returned array instead, e.g.$web2printConfig = Config::getWeb2PrintConfig();
$web2printConfig = $web2printConfig['chromiumSettings'];- Removed legacy callback from LocationAwareConfigRepository. Therefore, configurations in the old php file format are not supported anymore.
- Removed setting write targets and storage directory in the environment file. Instead, use the symfony config
- Renamed default directories from
image-thumbnails
andvideo-thumbnails
toimage_thumbnails
andvideo_thumbnails
. - Removed deprecated services/aliases:
Pimcore\Templating\Renderer\TagRenderer
,pimcore.cache.adapter.pdo
,pimcore.cache.adapter.pdo_tag_aware
- Rename config files from
*.yml
to*.yaml
. Note that we now usesystem_settings.yaml
as config file and notsystem.yml
- System Settings are now implementing the LocationAwareConfigRepository. See preparing guide
- The config node
pimcore.admin
and related parameters are moved to AdminBundle directly underpimcore_admin
node. Please adapt your parameter usage accordingly eg. instead ofpimcore.admin.unauthenticated_routes
, it should bepimcore_admin.unauthenticated_routes
- The deprecated config node
pimcore.error_handling
and the related parameterpimcore.response_exception_listener.render_error_document
was removed. - Moved
hide_edit_image
&disable_tree_preview
configs frompimcore
topimcore_admin
section. - Recommended and default format for storing the valid languages in
system_settings.yaml
is now an array, for example:- en
- de
pimcore:
general:
valid_languages:
- en
- de
[CoreBundle] :
- Please update CoreBundle config resource path from
@PimcoreCoreBundle/Resources/config/...
to@PimcoreCoreBundle/config/..
in your project configurations. - Priority of
PimcoreCoreBundle
has been changed to-10
to make sure that it is loaded after default bundles.
[Environment] :
- Removed
symfony/dotenv
dependency to make loading of.env
files optional. please add the requirement to your composer.json, if you still want to use.env
files. - Removed
PIMCORE_SKIP_DOTENV_FILE
environment var support. You still can use environment specific file like.env.test
or.env.prod
for environment specific environment variables.
[Gotenberg] :
- Introducing support for Gotenberg as PDF generation, conversion, merge etc.. tool
- [Asset] Added adapter (as alternative to LibreOffice) for preview generation of supported document type assets and set it as default adapter.
- [Web2Print] Added settings option, configuration and processor for PDF preview and generation
[Maintenance] :
- Removed
--async
&--force
option frompimcore:maintenance
command. Please make sure to setup tomessenger:consume pimcore_maintenance
independent
[Migrations] :
- Removed
executeMigrationsUp
fromPimcore\Composer
. - Pimcore does not run core migrations after
composer
update automatically anymore. Make sure that migrations are executed by running the commandbin/console doctrine:migrations:migrate --prefix=Pimcore\\Bundle\\CoreBundle
.
[Naming] :
- Renamed master, blacklist and whitelist to main, blocklist, allowlist
[Permissions] :
- Permission for DataObjects Classes has been structured in a more granular way to have more control. Field collections, objects bricks, classification stores and quantity value units now have their own permission.
[Sessions] :
- Removed AdminSessionHandler and AdminSessionListener. The session is now handled by Symfony.
- Removed
SessionConfiguratorInterface
&SessionConfigurator
so services with tagpimcore.session.configurator
will not register session bags anymore. - Removed parameter
pimcore.admin.session.attribute_bags
- TargetingSessionBagListener - changed the signature of
__construct
. AdminSessionHandler
requires session from request stack.EcommerceFrameworkBundle\SessionEnvironment
not loading from or storing into session in cli mode anymore.EcommerceFrameworkBundle\Tracking\TrackingManager
requires session from request stack.
Ecommerce
[Ecommerce General] :
- Ecommerce bundle has been moved into a package
pimcore/ecommerce-bundle
. If you wish to continue using the ecommerce framework, then please require the package in your composer.json and install it after enabling inconfig/bundles.php
. - The constructor of the following services has been changed, please adapt your custom implementation accordingly:
IndexService\ProductList\DefaultMysql
,IndexService\ProductList\DefaultFindologic
IndexService\Worker\AbstractElasticSearch
,IndexService\Worker\DefaultFindologic
,IndexService\Worker\DefaultMysql
,IndexService\Worker\OptimizedMysql
IndexService\Config\AbstractConfig
and it's sub-classes.Tracking\Tracker\Analytics\AbstractAnalyticsTracker
and it's sub-classes.
- Ecommerce related Events have been moved. Please check and adapt the Events' namespaces.
- [ClassDefinition\LinkGeneratorInterface] method signature has changed, instead of
Pimcore\Model\DataObject\Concrete
aobject
is used. - Elasticsearch 7 support was removed
- Config option
es_client_params
inindex_service
was removed - Remove deprecated methods
check()
andexists()
from classPimcore\Bundle\EcommerceFrameworkBundle\VoucherService\Reservation
[IndexService] :
- Please make sure to rebuild your product index to make sure changes apply accordingly (this is relevant for mysql and elasticsearch indices). As an alternative you could manually rename and remove
o_
from all index columns/fields.
[Product Interfaces] :
- Changed return type-hints of
CheckoutableInterface
methodsgetOSPrice
,getOSPriceInfo
,getOSAvailabilityInfo
,getPriceSystemName
,getAvailabilitySystemName
,getPriceSystemImplementation
,getAvailabilitySystemImplementation
to be non-nullable.
Elements
[All] :
- Added
setParentId
,setType
andsetParent
methods toPimcore\Model\Element\ElementInterface
- Removed fallback to parent id 1, when an element with a non-existing parent id gets created.
- Passing $force parameter as boolean is not valid anymore in
getById
,getByPath
,getElementById
methods. Instead, please pass it as an associative array ( eg.['force' => true]
). - Changed method signature on
Pimcore\Model\Element\ElementInterface::save()
, this changes the::save()
method on all classes (e.g. DataObjects and Pages) implementing the interface, including those inheriting fromConcrete
/AbstractObject
, see #13207 - Removed deprecated
getTotalCount()
method - Removed the deprecated
Pimcore\Model\Element\Service::getType()
, usePimcore\Model\Element\Service::getElementType()
instead. Element\Service::getValidKey()
strips all control/unassigned, invalid and some more special (e.g. tabs, line-breaks, form-feed & vertical whitespace) characters.- Removed deprecated
Pimcore\Model\Element\Service::getSaveCopyName()
method, please use thePimcore\Model\Element\Service::getSafeCopyName()
method instead.
[DataObjects][Assets][Documents] :
- Datetime values for scheduled tasks, application logger and notifications are now displayed in the local timezone.
[DataObjects][Documents] :
- Calling
getChildren/getSiblings
onAbstractObject
,Document
andAsset
now returns unloaded listing. If the list is not traveresed immediately, then it is required to callload()
explicitily. - Removed deprecated methods
getObject()
andsetObject()
on the classesPimcore\Model\Document\Link
andPimcore\Model\DataObject\Data\Link
, please usegetElement()
andsetElement()
instead.
Assets
- Refactored
Pimcore\Model\Asset::getMetadata
method to allow listing of all metadata entries filtered by a specific language. Prior this version, the language filter was only available when a specific metadata name was defined in the parameters. Added native type hints and related tests. - Removed the deprecated
marshal()/unmarshal()
methods for metadata, usenormalize()/denormalize()
methods instead. - Removed the deprecated
Import from Server
andImport from URL
options. - Asset/Asset Thumbnail Update messages are now routed to different queue
- Removed VR Preview. For details please see #14111
- Image thumbnails: Removed support for using custom callbacks for thumbnail transformations.
- Removed loading assets via fixed namespace only. Custom Asset Types can be configured.
- Thumbnails: improved method signature for
$thumbnail->getPath()
. You may now pass options as array$thumbnail->getPath(["deferredAllowed" => true, "frontend" => false]);
- Removed deprecated property
Pimcore\Model\Asset::$types
, usegetTypes()
instead
[Image Optimizer] :
- Removed all the Image Optimizer services (e.g. PngCrushOptimizer, JpegoptimOptimizer etc.) as image optimization is done by the new package spatie/image-optimizer.
[WebDAV] :
-
WebDAV url has been changed from
https://YOUR-DOMAIN/admin/asset/webdav
tohttps://YOUR-DOMAIN/asset/webdav
As result of this change, the following changes are required in your nginx configuration:
# Assets
....
location ~* ^(?!/admin)(.+?)....New:
# Assets
....
location ~* ^(?!/admin|/asset/webdav)(.+?)....
Data Objects
- Remove "generate type declarations" in class definitions
- Removed method_exists bc layer, please use the corresponding interfaces instead. For details please see #9571
isEqual()
for advanced relational field types does not check for type equality of meta fields anymore, see #12595- Added return types to setter methods. For details see #12185
- Alias
ReverseManyToManyObjectRelation
removed, please useReverseObjectRelation
instead. - Changed default behaviour: getByXXX methods on
Concrete
class now returns objects and variants if nothing else is specified. - Changed
$objectTypes
default value to include variants in certain scenarios. - Removed deprecated preview url in class editor.
- Removed sql filter functionality for data object grid
- Loading non-Concrete objects with the Concrete class is no longer possible
- Removed setter functions for calculated values, since they weren´t used anyway.
- Removed
o_
prefix for data object properties and database columns. - Due to the removal of the
o_
prefix the property namesclassTitle
,hasChildren
,siblings
,hasSiblings
,childrenSortBy
,childrenSortOrder
,versionCount
,dirtyLanguages
anddirtyFields
- Text data types now set their corresponding database columns to
null
instead of''
(empty string) when empty. - Method
Concrete::getClass()
throws NotFoundException if class is not found for an object. - Change type hints of
Pimcore\Model\DataObject\QuantityValue\QuantityValueConverterInterface::convert()
:public function convert(QuantityValue $quantityValue, Unit $toUnit): QuantityValue;
public function convert(AbstractQuantityValue $quantityValue, Unit $toUnit): AbstractQuantityValue;
- Added global language switcher for localized fields
- Added new helper inheritance helper function
DataObject\Service::useInheritedValues
- It's now possible to drop a video asset directly into an video editable in class
- Removed Button control for DataObjects layout definition.
[Class Definitions] :
- Class Resolver does not catch exceptions anymore.
[ClassSavedInterface] :
- Removed
method_exists
bc layer. Please add the correspondingClassSavedInterface
interface to your custom field definitions. For more details check the 10.6.0 patch notes.
[CSV Export] :
- Changed encoding of table data-types to
json_encode
frombase64_encoded
.
[CustomLayouts] :
- Removed command
pimcore:deployment:custom-layouts-rebuild
as CustomLayouts are migrated to LocationAwareConfigRepository.
[Relations] :
- Add possibility to inline download asset from relations
- Add confirm dialog to empty button of relations and add possibility to disable clear relations in the class layout.
[UrlSlug] :
- Removed
index
column andindex
index fromobject_url_slugs
table as it was not being used anywhere. - Allow processing unpublished fallback document is now default behaviour, removed the related configuration options and usages (
allow_processing_unpublished_fallback_document
,ElementListener::FORCE_ALLOW_PROCESSING_UNPUBLISHED_ELEMENTS
). For details, please see #10005
Documents
- Removed the functionality to input
metadata
html tags in Settings section of the document. - Removed
$types
property fromPimcore\Model\Document
. UsegetTypes
method instead. - Removed
pimcore:document:types
from config. The types will be represented by the keys of thetype_definitions:map
- Removed deprecated
Pimcore\Routing\Dynamic\DocumentRouteHandler::addDirectRouteDocumentType()
method, please use thepimcore.documents.type_definitions.map.%document_type%.direct_route
config instead. - Added
pimcore:documents:cleanup
command to remove documents with specified types and drop the related document type tables, useful in the cases like the removal of headless documents or web2print page/containers after uninstallation, see Documents - Removed the
attributes
field from the link editable. - Deprecated WkHtmlToImage has been removed.
- Added a second boolean parameter
$validate
to the setContentMainDocumentId() method. This will restrict the option to set pages as content main documents to each other. For details, please see #12891 - Refactored
pimcore.documents.valid_tables
to be an option under each document type definition (eg.pimcore.documents.type_definitions.map.%document_type%.valid_table
) instead of an own array node - Moving a document in the tree no longer opens the redirect prompt asking to create redirects. Creating a redirect is now configurable with
pimcore:redirects:auto_create_redirects
. This config includes URLSlugs and Pretty URLs.
pimcore_seo:
redirects:
auto_create_redirects: true
- Configuration of document types has changed. Now it is possible to change the navigational behavior and more of each document type in the configuration.
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] :
- The default template location of
AbstractTemplateAreabrick
is nowTEMPLATE_LOCATION_GLOBAL
.
[Controllers] :
- Removed deprecated
SensioFrameworkExtraBundle
which affects the following:@Template
annotation must be replaced with#[Template]
attribute. Template guessing based on controller::action is not supported anymore.@ResponseHeader
annotation must be replaced with#[ResponseHeader]
attribute. Removed deprecatedPimcore\Controller\Configuration\ResponseHeader
.@ParamConverter
annotation must be replaced with#[DataObjectParam]
attribute.
FrontendController::renderTemplate()
: Changed the visibility toprotected
.
[Chromium] :
- Added support to run chromium in Docker container and work via websocket for web2print and page previews, along of running it by a local binary.
[DocType] :
- staticGeneratorEnabled is now a boolean instead of an integer
[Document Editables] :
- Removed method_exists bc layer for
getDataEditmode()
,rewriteIds()
&load()
, please use the corresponding interfacesEditmodeDataInterface
,IdRewriterInterface
&LazyLoadingInterface
instead.
[Navigation] :
- Calling the method
Pimcore\Navigation\Builder::getNavigation()
using extra arguments is - Methods
Pimcore\Navigation::setDefaultPageType
,Pimcore\Navigation::getDefaultPageType
,Pimcore\Navigation\Container::_sort() and
Pimcore\Navigation\Page::_normalizePropertyName()` have been marked as internal.
[Sites] :
- Calling absolute path from a site is not possible anymore. If the absolute path is called, a 404 error will be returned instead.
- Default Site Id has been updated from
default
to0
. Please update configs using default site id accordingly.
[Video Editable] :
- Removed deprecated and legacy
<iframe>
attributes:frameborder
,webkitAllowFullScreen
,mozallowfullscreen
, andallowfullscreen
for YouTube, Vimeo, and DailyMotion embeds.
Infrastructure
[PHP Options] :
- Removed setting following options:
memory_limit
,max_execution_time
,max_input_time
anddisplay_errors
[PHP] :
- The minimum supported PHP version is now 8.1 and added support for 8.2
[Symfony] :
- Replace deprecated
Symfony\Component\HttpFoundation\RequestMatcher
withSymfony\Component\HttpFoundation\ChainRequestMatcher
Tools
[Application Logger] :
- Removed deprecated
PIMCORE_LOG_FILEOBJECT_DIRECTORY
constant, since flysystem is used to save/get fileobjects. Please make sure to adapt your code and migrate your fileobjects manually. - Table names of archive tables are now named with year-month rather than month-year see #8237.
[Cache] :
- Removed
psr/simple-cache
dependency, due to the lack of usage in the Core. - Responses containing a header
Cache-Control: no-store
will no longer be cached by the full page cache. - Removed the
Pimcore\Cache\Runtime
cache helper andPimcore\Cache\RuntimeCacheTrait
. The runtime cache is now handled byPimcore\Cache\RuntimeCache
.
[Console] :
- Methods
execInBackgroundUnix
&execInBackgroundWindows
visibility changed fromprotected
toprivate
and forgetSystemEnvironment
frompublic
toprivate
.
[Email] :
- Removed the deprecated methods setBodyHtml(), setBodyText(), createAttachment() and setSubject(). Use html(),
- Bumped
league/html-to-markdown
to ^5.1.
[Translations] :
- Translations Domains needs to be registered in order to be considered as valid. If you are using custom domains
- site_1
- site_2
pimcore:
translations:
domains:
- site_1
- site_2
- Added Symfony's html sanitizer to
\Pimcore\Model\Translation\Dao::save
method.
[Workflows] :
- Removed classes Pimcore\Model\Workflow, Pimcore\Model\Workflow\Dao, Pimcore\Model\Workflow\Listing\Dao and Pimcore\Model\Workflow\Listing.