Использование интерфейсов и трейтов
В некоторых случаях бывает полезно дополнить сгенерированные PHP-классы объектов данных, заставив их реализовывать определенные интерфейсы или добавляя дополнительные методы с помощью трейтов.
Пример
В данном примере на основе демо-проекта показано, как расширить класс Cars методами для получения типа трансмиссии и количества передач. Это будет реализовано через интерфейс и трейт, содержащий нужную логику.
Создание интерфейса
<?php
// src/Model/Product/TransmissionInterface.php
namespace App\Model\Product;
interface TransmissionInterface
{
public function getGearboxType(): ?string;
public function getNumberOfGears(): ?int;
}
Создание трейта
Создайте трейт, который будет возвращать тип коробки передач и количество ступеней:
<?php
// src/Traits/TransmissionTrait.php
namespace App\Traits;
trait TransmissionTrait
{
public function getGearboxType(): ?string
{
return "manual";
}
public function getNumberOfGears(): ?int
{
return 5;
}
}
Применение в классе Car
Перейдите в раздел Settings -> Data Objects -> Classes -> Product Data -> Car
Нажмите на General Settings и вставьте свой путь к интерфейсу и характеристикам в поля Implements interface(s) и Use (traits).

Сохраните ваши изменения
После сохранения Pimcore автоматически обновит сгенерированный PHP-класс, добавив в него строки
implements \App\Model\Product\TransmissionInterface и use \App\Traits\TransmissionTrait;
// var/classes/DataObject/Car.php
...
class Car extends \App\Model\Product\AbstractProduct implements \App\Model\Product\TransmissionInterface {
use \App\Traits\TransmissionTrait;
protected $classId = "CAR";
protected $className = "Car";
...
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.