Как написать на Symfony EventSubscriber который бы перехватывал запись в бд?

EventSubscriber в Symfony предоставляет механизм для перехвата и обработки определенных событий, возникающих во время выполнения приложения. Чтобы написать EventSubscriber для перехвата записи в базу данных, нужно выполнить несколько шагов:

Шаг 1: Создайте класс посредника (EventSubscriber)
Создайте новый класс, который реализует интерфейс EventSubscriberInterface. Этот класс будет выполнять функции посредника, перехватывая события, связанные с записями в базе данных.

use DoctrineCommonEventSubscriber;
use DoctrineORMEventLifecycleEventArgs;
use DoctrineORMEvents;

class DatabaseEventSubscriber implements EventSubscriber
{
    public function getSubscribedEvents()
    {
        return [
            Events::prePersist,
        ];
    }

    public function prePersist(LifecycleEventArgs $args)
    {
        // Ваш обработчик события
    }
}

Шаг 2: Зарегистрируйте свой EventSubscriber
Чтобы Symfony знал о существовании вашего EventSubscriber, вы должны его зарегистрировать. Это можно сделать в файле services.yaml или services.xml вашего проекта Symfony.

Ниже пример регистрации EventSubscriber в файле services.yaml:

services:
    AppEventSubscriberDatabaseEventSubscriber:
        tags:
            - { name: doctrine.event_subscriber }

Шаг 3: Обработка события
Теперь, когда ваш EventSubscriber зарегистрирован, он будет автоматически вызываться при возникновении события prePersist во время сохранения сущности в базе данных. В методе prePersist можно определить логику вашего обработчика события.

public function prePersist(LifecycleEventArgs $args)
{
    $entity = $args->getObject();

    // Обработка записи в базе данных
}

В методе prePersist вы можете получить сущность, которая сохраняется, с помощью метода getObject() объекта LifecycleEventArgs. Далее вы можете выполнять любую логику, которая вам необходима, связанную с сохранением записи в базе данных.

Таким образом, посредством написания EventSubscriber вы сможете перехватывать событие сохранения записи в базу данных и выполнять необходимую вам обработку в вашем проекте Symfony.