Внедрение услуг в сущности: проверьте, существует ли файл изображения

0

Я использую PHP и Doctrine ORM, и вот сделка: у меня есть таблица продуктов с полем изображения, и я хочу, чтобы событие проверяло, существует ли изображение в моем облачном хранилище активов (Amazon S3). Если файл существует, то все хорошо, но если это не так, я хотел бы вернуть путь к файлу образа-заполнителя. Теперь метод, который выполняет проверку наличия изображения, находится в моем классе S3Service.

Есть ли способ привязать событие к сущности, чтобы каждый раз, когда я вызывал что-то вроде:

$product = $this->em->getRepository('Entities\Product')
                ->findBy(['id' => $productId]);
echo $product->getImagePath();

Я мог бы получить изображение по умолчанию, если файл не существует (конечно, вызывая метод в S3Service). Теперь я знаю, что вы не должны вводить услуги в объекты, но для остальной части моего кода было бы намного чище, если бы я мог абстрагировать эту часть с моей сущностью. Вот почему я смотрю на решение, управляемое событиями. Я просмотрел события жизненного цикла объектов доктрины, но я не знаю, будет ли событие, которое выполняется, как только объект будет восстановлен.

Вопрос: на каком событии я должен смотреть или должен ли я смотреть на другое решение?

Теги:
amazon-s3
dependency-injection
doctrine2

1 ответ

0
Лучший ответ

Это не очень хорошая практика для инъекционных услуг в организации (например, в параметрах метода). ИМО вы должны создать сервис, который работает с изображениями, а в специальных методах получает объект как параметр. Как сказал Крис Уоллсмит на SymfonyCon - Модели представляют собой тонкие слои между слоем приложения и постоянным (db). Они не должны содержать много логики.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню