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));
}
}
}
是的,没有找到更好的。