Symfony 3.4 — как правильно написать Listener, чтобы он вызывался только при записи изменениях в Базе?

Для написания Listener'а в Symfony 3.4, который будет вызываться только при записи изменений в базу данных, можно использовать Doctrine Event Listeners. Вот пошаговая инструкция, как правильно реализовать такой Listener:

Шаг 1: Создайте Event Listener
Создайте класс-слушатель, который будет содержать логику, выполняющуюся при изменениях в БД. Например, вы можете создать файл src/EventListener/DatabaseChangeListener.php и определить в нем следующий класс:

namespace AppEventListener;

use DoctrineORMEventLifecycleEventArgs;

class DatabaseChangeListener
{
    public function postUpdate(LifecycleEventArgs $args)
    {
        // Ваша логика, которая будет выполняться после обновления сущности в БД
    }
}

Обратите внимание, что мы определили метод postUpdate(), который будет вызываться только после обновления сущности в БД. Вы также можете использовать другие методы, такие как prePersist(), preUpdate(), preRemove(), и так далее, в зависимости от ваших потребностей.

Шаг 2: Зарегистрируйте Event Listener
Теперь необходимо зарегистрировать вашего слушателя в контейнере зависимостей Symfony, чтобы он стал доступным для использования. Для этого добавьте следующую конфигурацию в файл services.yaml вашего проекта (если такого файла еще нет, создайте его в папке config):

services:
    AppEventListenerDatabaseChangeListener:
        tags:
            - { name: doctrine.event_listener, event: postUpdate }

В этом примере мы используем тег doctrine.event_listener для указания, что класс DatabaseChangeListener является слушателем событий Doctrine. Также мы указываем, что слушатель должен быть вызван только после события postUpdate.

Шаг 3: Первоначальная настройка
Убедитесь, что вы настроили Doctrine в файле config/packages/doctrine.yaml. Убедитесь, что все ваши сущности правильно настроены и отображены в Doctrine ORM.

Шаг 4: Проверьте Listener
Теперь ваш Listener должен автоматически вызываться при каждом обновлении сущности в базе данных. Вы можете добавить свою собственную логику в метод postUpdate() вашего Listener'а и проверить, что она работает как ожидается.

Это базовый пример написания Listener'а для вызова при записи изменений в Базу данных в Symfony 3.4. Вы можете дальше настраивать его в зависимости от вашей конкретной задачи и требований.