Php 在条令实体上实现自定义字段

Php 在条令实体上实现自定义字段,php,orm,doctrine-orm,Php,Orm,Doctrine Orm,我在条令中有一个附件实体,它引用了AmazonS3上的一个文件。我需要能够在实体上提供一种“计算字段”,计算出我所称的下载路径。downloadpath将是一个经过计算的URL,例如,我需要用实体本身的值(帐户和文件名)替换两个字符串值,因此 尽管我们使用服务层,但我希望下载路径在实体上始终可用,而不必通过SL 我已经考虑过向实体添加say常量的明显途径 const下载路径=”http://site.s3.amazon.com/%s/attach/%s';和一个自定义的getDownloadP

我在条令中有一个
附件
实体,它引用了AmazonS3上的一个文件。我需要能够在实体上提供一种“计算字段”,计算出我所称的
下载路径。
downloadpath
将是一个经过计算的URL,例如,我需要用实体本身的值(帐户和文件名)替换两个字符串值,因此

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

我已经考虑过向实体添加say常量的明显途径

const下载路径=”http://site.s3.amazon.com/%s/attach/%s';
和一个自定义的
getDownloadPath()
,但我希望在我的应用程序配置中保留类似此URL的细节,而不是实体类(另外,请参见下面的更新)

有人对我如何做到这一点有什么想法吗


更新以添加到,我现在意识到,我需要使用AmazonS3库生成一个临时URL,以允许对文件进行临时授权访问-我不希望通过静态调用我们的Amazon/附件服务来实现这一点,因为它感觉不太对劲。

结果证明,最干净的方法是使用类似的postLoad事件

<?php

namespace My\Listener;

use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Events;
use Doctrine\ORM\Event\LifecycleEventArgs;
use My\Entity\Attachment as AttachmentEntity;
use My\Service\Attachment as AttachmentService;

class AttachmentPath implements EventSubscriber
{
    /**
     * Attachment Service
     * @param \My\Service\Attachment $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));
        }
    }
}

是的,没有找到更好的。