Оформление
Создание сущности
В первую очередь необходимо создать сущность (Entity), которая будет реализовывать интерфейс Bia\AdminBundle\Interfaces\BaseAdminEntityInterface.
Создание класса сущности
Реализовать два метода:
getId()— метод для получения идентификатора сущности.getAdminTitle()— метод для унификации отображаемых имен сущностей в админке.
Для упрощения реализации базовых методов (например, для полей
id,createdAt,updatedAt), можно использовать трейтBia\AdminBundle\Traits\BaseEntityTrait, который предоставляет геттеры и сеттеры для этих полей.
Пример реализации
php
#[ORM\Entity]
#[ORM\HasLifecycleCallbacks]
class Podcast implements BaseAdminEntityInterface
{
use BaseEntityTrait;
#[ORM\Column(length: 255, type: Types::STRING)]
private string $title;
#[ORM\Column(type: Types::TEXT, nullable: true)]
private ?string $description = null;
#[ORM\Column(length: 255, type: Types::STRING)]
private string $url;
public function getAdminTitle(): string
{
return $this->getId() . ': ' . $this->title;
}
}Создание версионируемой сущности
Версионируемая сущность представляет собой связку двух сущностей: базовой и сущности состояния. Базовая сущность содержит поля, версионирование которых не требуется. Сущность состояния содержит поля, которые нужно версионировать.
Имя базовой сущности задается по общим правилам. Имя сущности состояния должно повторять имя базовой с окончанием State. Например, если базовая сущность называется Product, то сущность состояния должна называться ProductState.
Базовая сущность
Базовая сущность создается по аналогии с простой сущностью, но с некоторыми дополнениями.
- Вместо интерфейса
Bia\AdminBundle\Interfaces\BaseAdminEntityInterface, сущность должна реализовывать интерфейсBia\AdminBundle\Interfaces\BaseVersioningEntityInterface, который описывает необходимые для версионирования поля и методы. - В класс сущности должен быть подключен трейт
Bia\AdminBundle\Traits\BaseVersioningEntityTrait, реализующий необходимый функционал интерфейсаBaseVersioningEntityInterface. - Должна быть создана публичная константа класса
STATE_ENTITY, содержащая имя класса сущности состояния.
Пример
php
#[ORM\\Entity]
#[ORM\\HasLifecycleCallbacks]
class Product implements BaseVersioningEntityInterface, BaseAdminEntityInterface
{
use BaseEntityTrait;
use BaseVersioningEntityTrait;
public const STATE_ENTITY = ProductState::class;
#[ORM\\Column(length: 255)]
private string $title;
public function getAdminTitle(): string
{
return $this->getTitle();
}
public function getTitle(): string
{
return $this->title;
}
public function setTitle(string $title): void
{
$this->title = $title;
}
}Сущность состояния
Сущность состояния создается по аналогии с простой сущностью, но с некоторыми дополнениями:
- Вместо интерфейса
Bia\AdminBundle\Interfaces\BaseAdminEntityInterface, на класс сущности должен быть добавлен интерфейсBia\AdminBundle\Interfaces\EntityStateInterface. - В классе должна быть подключена трейт
Bia\AdminBundle\Traits\BaseEntityStateTrait. - В классе должно быть определено свойство
parent, которое указывает на базовую сущность, для которой служит это состояние.
Пример
php
#[ORM\\Entity]
#[ORM\\HasLifecycleCallbacks]
class ProductState implements EntityStateInterface, BaseAdminEntityInterface
{
use BaseEntityTrait;
use BaseEntityStateTrait;
#[ORM\\Column(type: 'string', length: 255)]
private string $description;
#[ORM\\Column(type: 'integer', options: ['default' => 0])]
private string $price;
#[ORM\\ManyToOne(targetEntity: Product::class, cascade: ["remove"], inversedBy: "entityStates")]
#[ORM\\JoinColumn(name: "parent", referencedColumnName: "id", nullable: true)]
private ?Product $parent = null;
public function getId(): int
{
return $this->id;
}
public function getAdminTitle(): string
{
return 'ProductState ' . $this->getId();
}
public function getDescription(): string
{
return $this->description;
}
public function setDescription(string $description): void
{
$this->description = $description;
}
public function getPrice(): string
{
return $this->price;
}
public function setPrice(string $price): void
{
$this->price = $price;
}
}