如何在OneToOne关系实体中注入变量

时间:2016-03-07 14:17:41

标签: file symfony path upload directory

我有一个File实体,用于在其他实体(新闻/博客/等)中上传句柄文件。

我用OneToOne关系指向它,它工作正常。但我会为每个关系实体更改上传目录:

上传/新闻
上传/博客

上传路径在我的文件实体中设置,所以我不知道如何自动更新路径foreach关系...
你知道怎么做吗? 感谢

1 个答案:

答案 0 :(得分:0)

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

private $uploadDir;

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

您的评论建议您将Symfony与Doctrine一起使用吗?

所以你可以像这样编辑经典的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');
}
// ....

您还可以添加常量以使代码更清晰...... 我希望它会帮助你