Я использую PHP и Doctrine ORM, и вот сделка: у меня есть таблица продуктов с полем изображения, и я хочу, чтобы событие проверяло, существует ли изображение в моем облачном хранилище активов (Amazon S3). Если файл существует, то все хорошо, но если это не так, я хотел бы вернуть путь к файлу образа-заполнителя. Теперь метод, который выполняет проверку наличия изображения, находится в моем классе S3Service.
Есть ли способ привязать событие к сущности, чтобы каждый раз, когда я вызывал что-то вроде:
$product = $this->em->getRepository('Entities\Product')
->findBy(['id' => $productId]);
echo $product->getImagePath();
Я мог бы получить изображение по умолчанию, если файл не существует (конечно, вызывая метод в S3Service). Теперь я знаю, что вы не должны вводить услуги в объекты, но для остальной части моего кода было бы намного чище, если бы я мог абстрагировать эту часть с моей сущностью. Вот почему я смотрю на решение, управляемое событиями. Я просмотрел события жизненного цикла объектов доктрины, но я не знаю, будет ли событие, которое выполняется, как только объект будет восстановлен.
Вопрос: на каком событии я должен смотреть или должен ли я смотреть на другое решение?
Это не очень хорошая практика для инъекционных услуг в организации (например, в параметрах метода). ИМО вы должны создать сервис, который работает с изображениями, а в специальных методах получает объект как параметр. Как сказал Крис Уоллсмит на SymfonyCon - Модели представляют собой тонкие слои между слоем приложения и постоянным (db). Они не должны содержать много логики.