Перейти к основному содержимому

Наследство данных и родительский класс

Pimcore обеспечивает два вида наследования. В то время как данные данных позволяет наследовать данные объектов вдоль дерева Иерархия объектов, разработчик может изменить иерархию класса PHP с помощью настройки родительского класса классов объектов.

Наследование данных

Очень важной функцией в связи с PIM является наследство данных. Наследство данных означает, что объекты того же Класс может наследовать данные от их родительских объектов в дереве объектов.

Одним из вариантов использования является хранение данных о продукте. Представьте себе, у вас есть группа продуктов, которые имеют много общих атрибутов и отличаться только несколькими атрибутами (например, размер, цвет, ...). Таким образом, вы можете создать родительский продукт, который хранит все Общие атрибуты. Затем вы добавляете детские продукты и указываете атрибуты, в которых продукты различаются (размер, цвет, ...). Все остальные атрибуты, которые они наследуют от общего родительского продукта.

Наследование данных должно быть включено в определении класса, как на экране ниже:

Наследство данных

Если наследование данных включено и атрибут объекта пуст, Pimcore пытается получить этот атрибут от родителя объект. Это работает только, если родительский объект имеет тот же класс, что и дочерний объект. Наследство данных между различными Занятия не поддерживаются.

В бэкэнде Pimcore наследственные значения визуализируются, как на экране ниже: они серые и немного прозрачные, и иметь зеленый маркер в левом верхнем углу. Нажмите на этот угол, можно открыть исходный объект этого конкретный атрибут.

Important Note regarding changing the inheritance flag If you toggle the inheritance flag after creating objects, the object_***_query* might contain
wrong values even after saving the object again. Pimcore will disable the dirty detection if the class is newer than the object which should fix this issue. However, you can still call DataObject::disableDirtyDetection() before saving the object if you want to explicitely fix that.

**Default Values Make sure that you understand the impacts of defining a default value which is described здесь

Наследство данных

Наследство данных

Наследство данных

Чтобы получить унаследованные значения в бэкэнд через код, вы должны использовать методы геттера атрибутов. Доступа Атрибуты напрямую, вы не получите унаследованные значения.

Bear in mind The complex data type field collections does not support inheritance.

Получение значений из объекта без наследования

// Set the first argument to false so as not to inherit any values  
DataObject\Service::userInheritedValues(false, function() {
// ... your code goes here
// ...
// ...
});

Parent Class - Class Inheritance

Pimcore data objects support inheritance, just as any PHP object does. In Pimcore the class from which a specific data class inherits can be changed. By default, a data class inherits from Pimcore\Model\DataObject\Concrete, but if required otherwise, a data class can extend a different parent class. If the parent class should be changed, this needs to be specified in the class definition as shown in the screen below: {P5}

Be Careful
This is a very advanced feature and should only be used by very experienced developers who know what they are doing and what consequences it might have when the parent class is changed from Pimcore\Model\DataObject\Concrete to something else.

In order to maintain all Pimcore functionalities, it has to be ensured that the special class used in the example above extends Pimcore\Model\DataObject\Concrete and that its methods don't override and clash in unexpected ways with existing methods of Pimcore\Model\DataObject\Concrete or any magic functions of Pimcore\Model\DataObject\Concrete or its parent classes.

It is also possible to use class inheritance and traits for listing data object model.

Hooks available when using class inheritance

Currently there's only one hook available. For using a hook you need to implement a certain interface in your custom parent class.

InterfaceDescription
PreGetValueHookInterfaceMakes it possible to modify data before returning it to the caller. Hook is called at the beginning of every getter of a field.
Example:
namespace Website\DataObject;  

use \Pimcore\Model\DataObject;

class Special extends DataObject\Concrete implements DataObject\PreGetValueHookInterface
{
public function preGetValue(string $key): ?string
{
if ($key == "myCustomProperty") {
return strtolower($object->myCustomProperty);
}

return null;
}
}

переопределение моделей Pimcore

В дополнение к родительским классам также можно переопределить классы объектов Pimcore с помощью пользовательских классов и рассказать Pimcore Чтобы использовать пользовательские классы вместо сгенерированных классов объектов. Это можно сделать с помощью {p5}.


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.