Edit on GitHub

Overriding Models / Entities in Pimcore

Sometimes it is necessary to override certain functionalities of Pimcore's core models, therefore it is possible to override the core models with your own classes.

Currently this works for all implementations of the following classes (but not for these classes directly):

  • Pimcore\Model\Document
  • Pimcore\Model\Document\Listing
  • Pimcore\Model\AbstractObject
  • Pimcore\Model\DataObject\Listing
  • Pimcore\Model\Asset
  • Pimcore\Model\Asset\Listing

So for example overriding a listing class of a custom class definition like Pimcore\Model\DataObject\News\Listing or Pimcore\Model\Asset\Image is supported.

But you cannot override Pimcore\Model\Asset (or the other abstract model classes) ifself (as it is the parent class of for example Pimcore\Model\Asset\Image and that would mean to change the class hierarchy).

Configure an Override

The configuration is a simple key / value map in your app/config/config.yml using the key pimcore.models.class_overrides, for example:

pimcore:
    models:
        class_overrides:
            'Pimcore\Model\DataObject\News': 'AppBundle\Model\DataObject\News'
            'Pimcore\Model\DataObject\News\Listing': 'AppBundle\Model\DataObject\News\Listing'

It is crucial that your override class extends the origin class, if not you'll break the entire system.

Don't forget to clear all caches (Symfony + Data Cache) after you have configured a class override ./bin/console cache:clear --no-warmup && ./bin/console pimcore:cache:clear

Example

In your app/config/config.yml:

pimcore:
    models:
        class_overrides:
            'Pimcore\Model\DataObject\News': 'AppBundle\Model\DataObject\News'

Your AppBundle\Model\DataObject\News:

<?php 

namespace AppBundle\Model\DataObject; 

class News extends \Pimcore\Model\DataObject\News {

    // start overriding stuff 
    public function getMyCustomAttribute() {
        
    }
}