Php 将服务注入实体:检查图像文件是否存在

Php 将服务注入实体:检查图像文件是否存在,php,symfony,dependency-injection,doctrine-orm,amazon-s3,Php,Symfony,Dependency Injection,Doctrine Orm,Amazon S3,我正在使用PHP和Doctrine ORM,交易如下:我有一个带有图像字段的产品表,我想要一个事件来检查我的资产云存储(AmazonS3)中是否存在图像。如果文件存在,则一切正常,但如果不存在,我希望返回占位符图像的文件路径。现在,检查映像是否存在的方法驻留在我的S3Service类中 我是否有办法将事件与实体联系起来,以便每次我调用以下内容时: $product = $this->em->getRepository('Entities\Product')

我正在使用PHP和Doctrine ORM,交易如下:我有一个带有图像字段的产品表,我想要一个事件来检查我的资产云存储(AmazonS3)中是否存在图像。如果文件存在,则一切正常,但如果不存在,我希望返回占位符图像的文件路径。现在,检查映像是否存在的方法驻留在我的S3Service类中

我是否有办法将事件与实体联系起来,以便每次我调用以下内容时:

$product = $this->em->getRepository('Entities\Product')
                ->findBy(['id' => $productId]);
echo $product->getImagePath();
如果文件不存在,我将能够获得默认图像(当然,通过调用S3Service中的方法)。现在我知道您不应该将服务注入实体,但是如果我可以用实体抽象这一部分,那么我的代码的其余部分就会更干净。这就是为什么我在寻找一种事件驱动的解决方案。我已经查看了条令实体的生命周期事件,但我不知道是否有一个事件会在检索实体时立即执行


问题是:我应该关注什么事件,还是应该关注另一个解决方案?

将服务注入实体(例如,在方法参数中)不是一个好的做法。在我看来,您应该创建一个服务,该服务在图像上运行,并以特定的方法获取实体作为参数。正如Kris Wallsmith在SymfonyCon上所说,模型是应用程序和持久性(db)层之间的薄层。它们不应该包含太多逻辑。

postLoad事件()可能适合您,尽管每次加载映像时检查云存储似乎很奇怪。您真的这么认为吗?我最初认为它对我有利。我今天一直在从性能的角度考虑这个问题,感觉确实有点沉重。