如何在 OneToOne 关系实体中注入变量
how to inject a variable in a OneToOne relation entity
我有一个文件实体用于处理其他实体中的文件上传 (news/blog/etc)。
我用 OneToOne 关系指向它,它工作正常。但我会为每个关系实体更改上传目录:
upload/news
upload/blog
上传路径设置在我的文件实体中,所以我不知道如何自动更新每个关系的路径...
你知道怎么做吗?
谢谢
当然可以。
在您的文件实体端,您可以添加一个 uploadDir 属性,并创建一个 setter 像这样:
private $uploadDir;
public function setUploadDir($uploadDir)
{
if (!$this->uploadDir) {
$this->uploadDir = $uploadDir;
}
}
您的评论建议您使用 Symfony 和 Doctrine,对吗?
因此您可以像这样编辑经典的 getUploadDir() 方法:
protected function getUploadDir()
{
return 'uploads/' . $this->uploadDir;
}
在 'parent' 实体中,您必须在保留或更新之前更新此属性(创建时)。
(我个人使用生命周期回调,但您可以在控制器中手动执行)
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');
}
// ....
您还可以添加一个常量来使代码更简洁...
希望对你有所帮助
我有一个文件实体用于处理其他实体中的文件上传 (news/blog/etc)。
我用 OneToOne 关系指向它,它工作正常。但我会为每个关系实体更改上传目录:
upload/news
upload/blog
上传路径设置在我的文件实体中,所以我不知道如何自动更新每个关系的路径...
你知道怎么做吗?
谢谢
当然可以。 在您的文件实体端,您可以添加一个 uploadDir 属性,并创建一个 setter 像这样:
private $uploadDir;
public function setUploadDir($uploadDir)
{
if (!$this->uploadDir) {
$this->uploadDir = $uploadDir;
}
}
您的评论建议您使用 Symfony 和 Doctrine,对吗?
因此您可以像这样编辑经典的 getUploadDir() 方法:
protected function getUploadDir()
{
return 'uploads/' . $this->uploadDir;
}
在 'parent' 实体中,您必须在保留或更新之前更新此属性(创建时)。
(我个人使用生命周期回调,但您可以在控制器中手动执行)
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');
}
// ....
您还可以添加一个常量来使代码更简洁... 希望对你有所帮助