Doctrine Behaviors

Doctrine Behaviors

Версія Завантаження Зірки

composer require ufo-tech/doctrine-behaviors
  • PHP 8.4+
  • Symfony 7 · 8
  • Основа Doctrine ORM 3.7+ · DBAL 4.2+
  • Тип Symfony Bundle
  • Категорія Doctrine
  • Ліцензія MIT

GitHub Packagist Історія змін Відомі помилки

Набір поведінок для сутностей Doctrine ORM у Symfony 7 / 8: часові мітки, автор змін, м'яке видалення, переклади, slug, дерева, UUID і журнал змін. Поведінка вмикається інтерфейсом і трейтом на сутності — бандл сам додає потрібні колонки в мапінг і заповнює їх у подіях Doctrine.

Пакет — форк KnpLabs/DoctrineBehaviors (через проміжний форк Miets/DoctrineBehaviors). Оригінал не працює з Symfony новіше 6.3 і з DBAL 4; форк UFO-Tech оновлює код під Symfony 7+ / 8, Doctrine ORM 3 і DBAL 4. Ідеї, API і більшість коду — від авторів KnpLabs, ліцензія MIT.

Документація описує версію 2.0.0.

Як це виглядає

use Doctrine\ORM\Mapping as ORM;
use Ufo\DoctrineBehaviors\Contract\Entity\SoftDeletableInterface;
use Ufo\DoctrineBehaviors\Contract\Entity\TimestampableInterface;
use Ufo\DoctrineBehaviors\Model\SoftDeletable\SoftDeletableTrait;
use Ufo\DoctrineBehaviors\Model\Timestampable\TimestampableTrait;

#[ORM\Entity]
class Article implements TimestampableInterface, SoftDeletableInterface
{
    use TimestampableTrait;
    use SoftDeletableTrait;

    #[ORM\Id, ORM\GeneratedValue, ORM\Column]
    private ?int $id = null;
}

Колонки createdAt, updatedAt і deletedAt з'являться в мапінгу без жодного #[ORM\Column]; часові мітки заповнюються під час flush(), а $entityManager->remove($article) лише проставляє deletedAt.

Поведінки

Поведінка Інтерфейс Трейт Що додає
Timestampable TimestampableInterface TimestampableTrait createdAt, updatedAt
Blameable BlameableInterface BlameableTrait createdBy, updatedBy, deletedBy
SoftDeletable SoftDeletableInterface SoftDeletableTrait deletedAt, видалення без DELETE
Translatable TranslatableInterface, TranslationInterface TranslatableTrait, TranslationTrait зв'язок із сутністю перекладів, locale
Sluggable SluggableInterface SluggableTrait slug
Tree TreeNodeInterface TreeNodeTrait, TreeTrait (репозиторій) materializedPath
Uuidable UuidableInterface UuidableTrait uuid
Loggable LoggableInterface LoggableTrait записи в PSR-3 логер

Інтерфейси лежать у Ufo\DoctrineBehaviors\Contract\Entity, трейти — у Ufo\DoctrineBehaviors\Model\<Поведінка>. Кожен трейт, крім LoggableTrait, складається з двох: ...PropertiesTrait (властивості) і ...MethodsTrait (методи) — їх можна підключати окремо, якщо властивості потрібно оголосити по-своєму.

Колонку бандл додає, лише якщо поле з такою назвою ще не змаплене, тож тип чи довжину можна задати власним мапінгом.

Розділи