Я хочу удалить файл, связанный с данным объектом, после удаления самого объекта из базы данных.Событие postRemove в Doctrine кажется идеальным для этого, за исключением случаев, когда удаление происходит внутри транзакции.Если откатить транзакцию после удаления объекта - файлы будут удалены, но объект останется в базе данных.
Проект, над которым я работаю, очень большой, и этот объект широко используется.Часто его также удаляют с помощью «cascade = remove», поэтому «соулмент« вы можете просто не использовать события и делать это каждый раз вручную »- это своего рода головная боль для реализации.
Пример:
$img = new Image();
$img->setFileName('test.jpg');
$em->persist($img);
$em->flush();
$em->beginTransaction();
$em->remove($img);
$em->flush();
$em->rollback();
Само событие будет выглядеть следующим образом:
public function postRemove(LifecycleEventArgs $args) {
$entity = $args->getObject();
$em = $args->getObjectManager();
if ($entity instanceof Image && file_exists($entity->getFileName())) {
unlink($entity->getFileName());
}
}
После выполнения этого кода файл «test.jpg» будет удален, но объект все равно останется.
Чего я хочу добиться: при откате и файл, и объект остаются, а при фиксации оба они удаляются.