← Налаштування Doctrine Behaviors
docs: Doctrine section with Doctrine Behaviors and Doctrine Helper (uk + en)
uk/docs/doctrine/doctrine-behaviors/config.md
новий файл +92
−0
Налаштування Doctrine Behaviors
Бандл не має власного розділу конфігурації. Поведінка змінюється параметрами контейнера та заміною двох провайдерів.
Параметри
Задайте потрібні параметри в config/services.yaml (значення застосунку мають пріоритет над значеннями бандла):
# config/services.yaml
parameters:
doctrine_behaviors_blameable_user_entity: App\Entity\User
doctrine_behaviors_timestampable_date_field_type: datetimetz
doctrine_behaviors_translatable_fetch_mode: LAZY
doctrine_behaviors_translation_fetch_mode: LAZY
| Параметр | За замовчуванням | Що змінює |
|---|---|---|
doctrine_behaviors_blameable_user_entity |
null |
Клас сутності користувача. Якщо задано і клас існує, createdBy / updatedBy / deletedBy мапляться як ManyToOne на цю сутність; інакше — рядкові колонки. Див. Blameable. |
doctrine_behaviors_timestampable_date_field_type |
datetime |
Тип Doctrine для createdAt / updatedAt. Див. Timestampable. |
doctrine_behaviors_translatable_fetch_mode |
LAZY |
Стратегія завантаження колекції translations сутності, що перекладається: LAZY, EAGER, EXTRA_LAZY. |
doctrine_behaviors_translation_fetch_mode |
LAZY |
Стратегія завантаження зв'язку translatable сутності перекладу; ті самі значення. |
Будь-яке інше значення fetch mode трактується як LAZY. Детальніше — Translatable.
Провайдер користувача
Blameable бере поточного користувача з Ufo\DoctrineBehaviors\Contract\Provider\UserProviderInterface. Типова реалізація Ufo\DoctrineBehaviors\Provider\UserProvider повертає getUser() з токена Symfony Security (якщо задано doctrine_behaviors_blameable_user_entity — лише екземпляр цього класу) або null, коли токена немає.
Власна реалізація — наприклад, щоб зберігати ідентифікатор користувача рядком:
namespace App\Doctrine;
use Symfony\Bundle\SecurityBundle\Security;
use Ufo\DoctrineBehaviors\Contract\Provider\UserProviderInterface;
final class UserIdentifierProvider implements UserProviderInterface
{
public function __construct(private Security $security) {}
public function provideUser(): ?string
{
return $this->security->getUser()?->getUserIdentifier();
}
public function provideUserEntity(): ?string
{
return null;
}
}
# config/services.yaml
services:
Ufo\DoctrineBehaviors\Contract\Provider\UserProviderInterface: '@App\Doctrine\UserIdentifierProvider'
Якщо provideUser() повертає null, Blameable нічого не змінює.
Провайдер локалі
Translatable бере локалі з Ufo\DoctrineBehaviors\Contract\Provider\LocaleProviderInterface:
provideCurrentLocale()— локаль поточного запиту, без запиту —null; якщо локаль запиту порожня — локальTranslatorInterface;provideFallbackLocale()— локаль за замовчуванням запиту, без запиту — параметрlocale, а якщо його немає —kernel.default_locale.
Замінюється так само, як провайдер користувача:
services:
Ufo\DoctrineBehaviors\Contract\Provider\LocaleProviderInterface: '@App\Doctrine\MyLocaleProvider'
Слухачі Doctrine
Кожна поведінка — окремий клас у Ufo\DoctrineBehaviors\EventSubscriber, зареєстрований атрибутом #[AsDoctrineListener] з пріоритетом 500 для з'єднання default:
| Слухач | Події |
|---|---|
TimestampableEventSubscriber |
loadClassMetadata |
BlameableEventSubscriber |
loadClassMetadata, prePersist, preUpdate, preRemove |
SoftDeletableEventSubscriber |
loadClassMetadata, onFlush |
TranslatableEventSubscriber |
loadClassMetadata, postLoad, prePersist |
SluggableEventSubscriber |
loadClassMetadata, prePersist, preUpdate |
TreeEventSubscriber |
loadClassMetadata |
UuidableEventSubscriber |
loadClassMetadata, prePersist |
LoggableEventSubscriber |
postPersist, postUpdate, preRemove |
Сервіси бандла публічні й автовайряться, тож будь-який слухач можна перевизначити в config/services.yaml під тим самим ідентифікатором класу.