Переопределение моделей и сущностей в Pimcore
Иногда возникает необходимость изменить или расширить стандартную функциональность базовых моделей Pimcore. Для этого предусмотрена возможность подмены основных моделей вашими собственными классами.
На данный момент переопределение работает для всех реализаций следующих классов (но не для самих этих абстрактных классов напрямую):
Pimcore\Model\DocumentPimcore\Model\Document\ListingPimcore\Model\AbstractObjectPimcore\Model\DataObject\ListingPimcore\Model\AssetPimcore\Model\Asset\Listing
Вы можете переопределить класс листинга для конкретного класса данных, например: Pimcore\Model\DataObject\News\Listing или модель изображения Pimcore\Model\Asset\Image.
Вы не можете переопределить сам класс Pimcore\Model\Asset (или другие базовые абстрактные модели), так как они являются родительскими для конкретных типов (например, для того же Asset\Image), и их подмена означала бы нарушение иерархии классов.
Настройка переопределения
Конфигурация представляет собой простую карту соответствий «ключ-значение» в файле config/config.yaml. Используйте ключ pimcore.models.class_overrides, например:
pimcore:
models:
class_overrides:
'Pimcore\Model\DataObject\News': 'App\Model\DataObject\News'
'Pimcore\Model\DataObject\News\Listing': 'App\Model\DataObject\News\Listing'
Очень важно, чтобы ваш переопределяющий класс расширял исходный класс, иначе вы сломаете всю систему.
Не забудьте очистить все кэши (Symfony + Data Cache) после того, как вы настроили переопределение класса
./bin/console cache:clear --no-warmup && ./bin/console pimcore:cache:clear
Пример
В вашем config/config.yaml:
pimcore:
models:
class_overrides:
'Pimcore\Model\DataObject\News': 'App\Model\DataObject\News'
Ваш App\Model\DataObject\News:
<?php
namespace App\Model\DataObject;
class News extends \Pimcore\Model\DataObject\News
{
// Ваша кастомная логика
public function getMyCustomAttribute(): mixed
{
...
}
}
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.