在学说实体上实现自定义字段



我在学说中有一个Attachment实体,该实体在Amazon S3上引用文件。我需要能够在实体上提供一种"计算出的字段",使我称为downloadpathdownloadpath将是计算出的URL,例如http://site.s3.amazon.com/%S/attach/%S,我需要用实体本身上的值替换两个字符串值(帐户和文件名),所以;

http://site.s3.amazon.com/1/attach/test1234.txt

尽管我们使用服务层,但我希望downloadpath始终在实体上可用,而不必通过SL。

我已经考虑了向实体添加常数的明显途径;

const DOWNLOAD_PATH = 'http://site.s3.amazon.com/%s/attach/%s';和一个自定义getDownloadPath(),但我想在我的应用程序的配置中保留这样的详细信息,而不是实体类(另请参见下面的更新)

有人对我如何实现这一目标有任何想法吗?

更新要添加到此,我现在知道我需要使用Amazons3库生成临时URL,以允许对文件进行临时授权访问 - 我宁愿不做一个静态呼叫我们的亚马逊/附件服务,因为它感觉不正确。

事实证明,这样做的最干净的方法是使用后载事件so;

<?php
namespace MyListener;
use DoctrineCommonEventSubscriber;
use DoctrineORMEvents;
use DoctrineORMEventLifecycleEventArgs;
use MyEntityAttachment as AttachmentEntity;
use MyServiceAttachment as AttachmentService;
class AttachmentPath implements EventSubscriber
{
    /**
     * Attachment Service
     * @param MyServiceAttachment $service
     */
    protected $service;
    public function __construct(AttachmentService $service)
    {
        $this->service = $service;
    }
    public function getSubscribedEvents()
    {
        return array(Events::postLoad);
    }
    public function postLoad(LifecycleEventArgs $args)
    {
        $entity = $args->getEntity();
        if ($entity instanceof AttachmentEntity) {
            $entity->setDownloadPath($this->service->getDownloadPath($entity));
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新