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

Использование интерфейсов и трейтов

В некоторых случаях бывает полезно дополнить сгенерированные 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";
...


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