1
我有一个File实体用于在其他实体(新闻/博客/等)中处理文件上传。如何在OneToOne关系实体中注入变量
我指出它与OneToOne关系,它工作正常。不过,我会改变的上传目录,对于每个关系的实体:
上传/新闻
上传/博客
上传路径在我的文件实体,所以我不知道如何automaticaly更新路径的foreach关系设置...
你有一个想法如何做到这一点?
谢谢
我有一个File实体用于在其他实体(新闻/博客/等)中处理文件上传。如何在OneToOne关系实体中注入变量
我指出它与OneToOne关系,它工作正常。不过,我会改变的上传目录,对于每个关系的实体:
上传/新闻
上传/博客
上传路径在我的文件实体,所以我不知道如何automaticaly更新路径的foreach关系设置...
你有一个想法如何做到这一点?
谢谢
当然,你可以做到这一点。 在您的文件实体的一面,你可以添加一个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');
}
// ....
您还可以添加一个常数,使代码更清洁...... 我希望它会帮助你
请显示您的文件实体定义 – LBA
它不会帮助您.. ^^ @ORM \ OneToOne(targetEntity =“File”,cascade = {“persist”}) – arno
您无法将属性与OneToOne关联关联,因此要么用你的文件实体(这是targetEntity,你没有显示它)存储你的路径,要么你解决你的关联到OneToMany/ManyToOne,您可以在您的关联中拥有属性,例如,你的路径 - 但我没有看到任何意义。 – LBA