Встановлення Doctrine Behaviors

Встановлення Doctrine Behaviors

Вимоги: PHP 8.4+, Symfony ^7.0 або ^8.0, doctrine/orm ^3.7, doctrine/dbal ^4.2, doctrine/persistence ^4.0, doctrine/doctrine-bundle ^3.0, symfony/security-bundle ^7.0 | ^8.0. Для PHP 8.2–8.3, DBAL 3 чи DoctrineBundle 2 лишається 1.0.4, але в ній є помилки, виправлені лише в 2.0.0 (див. Виправлені помилки).

Крок 0: Рецепти Symfony Flex

Щоб Flex зареєстрував бандл автоматично, додайте репозиторій рецептів UFO-Tech у composer.json проєкту:

{
    "extra": {
        "symfony": {
            "endpoint": [
                "https://api.github.com/repos/ufo-tech/recipes/contents/index.json?ref=main",
                "flex://defaults"
            ]
        }
    }
}

Крок 1: Встановлення

composer require ufo-tech/doctrine-behaviors

Рецепт лише додає бандл у config/bundles.php; конфігураційних файлів він не створює.

Крок 2: Реєстрація бандла

Без рецепта додайте вручну в config/bundles.php:

return [
    // ...
    Ufo\DoctrineBehaviors\DoctrineBehaviorsBundle::class => ['all' => true],
];

Окремого розділу конфігурації (doctrine_behaviors:) у бандла немає: значення за замовчуванням змінюються параметрами контейнера — див. Налаштування.

Крок 3: Перша поведінка

Додайте інтерфейс і трейт до сутності:

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

#[ORM\Entity]
class Category implements TimestampableInterface
{
    use TimestampableTrait;

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

Крок 4: Схема бази даних

Бандл змінює мапінг сутностей, тому оновіть схему — міграцією:

bin/console doctrine:migrations:diff
bin/console doctrine:migrations:migrate

або напряму (для розробки):

bin/console doctrine:schema:update --force

Які колонки додає бандл, видно в SQL: bin/console doctrine:schema:update --dump-sql.

Слухачі бандла зареєстровані лише для з'єднання Doctrine default. Сутності, якими керує менеджер іншого з'єднання, поведінок не отримують — див. Відомі помилки.

PHPStan

У пакеті є розширення PHPStan, що уточнює типи translate(), getTranslations() і getTranslatable(). З phpstan/extension-installer воно підключається автоматично; без нього додайте в phpstan.neon:

includes:
    - vendor/ufo-tech/doctrine-behaviors/phpstan-extension.neon

Що далі?