Есть ли возможность поймать пакетное действие сонаты внутри подписчика / слушателя?
Уже пробовал использовать что-то вроде 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}
Похоже, что перехватчик для этого события не реализован, так как его можно вызвать только из класса администратора.
Так, может быть, есть возможность создать событие самостоятельно?




Менеджер модели администратора Sonata (используемый при пакетном удалении) на самом деле выполняет итерацию по объектам. Таким образом, вы можете подключиться к обратным вызовам жизненного цикла доктрины и выполнить там свою логику.
Но в целом действие preBatch не вызывает никаких событий, но вы все равно можете переопределить этот preBatchAction в своем классе администратора и инициировать свое событие оттуда.
Обновление: Да, мне удалось сделать то, что мне нужно, создав preRemoveListener. Затем я использую данные запроса, потому что соната фактически отправляет идентификаторы того, что удаляет, или bool (all_elements).
На этот раз переопределение в классе администратора не сработает, потому что мне нужна система загрузки, которая работает автоматически. О первом. Да, похоже, это единственный способ. Я постараюсь. Спасибо.