2016-03-07 84 views
1

我有一个File实体用于在其他实体(新闻/博客/等)中处理文件上传。如何在OneToOne关系实体中注入变量

我指出它与OneToOne关系,它工作正常。不过,我会改变的上传目录,对于每个关系的实体:

上传/新闻
上传/博客

上传路径在我的文件实体,所以我不知道如何automaticaly更新路径的foreach关系设置...
你有一个想法如何做到这一点?
谢谢

+0

请显示您的文件实体定义 – LBA

+2

它不会帮助您.. ^^ @ORM \ OneToOne(targetEntity =“File”,cascade = {“persist”}) – arno

+0

您无法将属性与OneToOne关联关联,因此要么用你的文件实体(这是targetEntity,你没有显示它)存储你的路径,要么你解决你的关联到OneToMany/ManyToOne,您可以在您的关联中拥有属性,例如,你的路径 - 但我没有看到任何意义。 – LBA

回答

0

当然,你可以做到这一点。 在您的文件实体的一面,你可以添加一个uploadDir属性,创建这样一个setter:

private $uploadDir; 

public function setUploadDir($uploadDir) 
{ 
    if (!$this->uploadDir) { 
     $this->uploadDir = $uploadDir; 
    } 
} 

您的评论建议你使用的Symfony与学说吧?

所以,你可以编辑这样的经典getUploadDir()方法:

protected function getUploadDir() 
{ 
    return 'uploads/' . $this->uploadDir; 
} 

在您必须更新该属性(在创建时)之前持续或更新的“父”实体。

(我个人使用的生命周期回调,但你可以在你的控制器做手工)

use Doctrine\ORM\Mapping as ORM; 
/** 
* News 
* 
* @ORM\Table(name="News") 
* @ORM\HasLifecycleCallbacks 
*/ 
class News 
{ 
    //.... 

/** 
* @ORM\OneToOne(targetEntity="File",cascade={"persist","remove"}) 
*/ 
private $file; 

/** 
* @ORM\PrePersist() 
* @ORM\PreUpdate() 
*/ 
function setUploadDir() 
{ 
    $this->getFile()->setUploadDir('news'); 
} 
// .... 

您还可以添加一个常数,使代码更清洁...... 我希望它会帮助你