Событие preBatch SonataAdmin для использования в слушателе / ​​подписчике

Есть ли возможность поймать пакетное действие сонаты внутри подписчика / слушателя?

Уже пробовал использовать что-то вроде sonata.admin.event.persistence.pre_batch, но не работает

Зачем мне это нужно?

Когда пользователь выполняет пакетное удаление объектов, содержащих изображения (за ним стоит рабочая система пользовательского загрузчика), я также должен удалить все изображения из файловой системы.

Моя текущая конфигурация

(Здесь все работает, и я хочу добавить событие pre_batch, но пока безуспешно)

    image.uploader.subscriber:
    class: AdminBundle\EventListener\ImageUploaderSubscriber
    arguments:
        - '@image.remover'
        - '@image.uploader'
    tags:
        - {name: kernel.event_listener, event: sonata.admin.event.persistence.pre_persist, method: prePersist}
        - {name: kernel.event_listener, event: sonata.admin.event.persistence.pre_update, method: preUpdate}
        - {name: kernel.event_listener, event: sonata.admin.event.persistence.pre_remove, method: preRemove}

Похоже, что перехватчик для этого события не реализован, так как его можно вызвать только из класса администратора.

Так, может быть, есть возможность создать событие самостоятельно?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
193
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Менеджер модели администратора Sonata (используемый при пакетном удалении) на самом деле выполняет итерацию по объектам. Таким образом, вы можете подключиться к обратным вызовам жизненного цикла доктрины и выполнить там свою логику.

Но в целом действие preBatch не вызывает никаких событий, но вы все равно можете переопределить этот preBatchAction в своем классе администратора и инициировать свое событие оттуда.

На этот раз переопределение в классе администратора не сработает, потому что мне нужна система загрузки, которая работает автоматически. О первом. Да, похоже, это единственный способ. Я постараюсь. Спасибо.

revengeance 30.05.2018 15:41

Обновление: Да, мне удалось сделать то, что мне нужно, создав preRemoveListener. Затем я использую данные запроса, потому что соната фактически отправляет идентификаторы того, что удаляет, или bool (all_elements).

revengeance 06.06.2018 16:33

Другие вопросы по теме