gpt4 book ai didi

optimization - Zend 框架 2 + 学说 : removing media with related Entity

转载 作者:行者123 更新时间:2023-12-03 17:23:24 27 4
gpt4 key购买 nike

我已设置 ZF2 骨架应用与 教义2 .我的目标是创建具有简单层次结构的简单新闻服务。

  Category -> News -> Media (file)

我已经为类别、新闻和媒体设置了所有必需的关系(即,如果新闻被删除,所有相关媒体都会从数据库中删除)。

问题 是媒体指向某个文件(位于文件存储中)。我实现了一个简单的功能,删除与新闻相关的所有媒体,然后删除新闻本身。
  $news->deleteImg();
$this->getEntityManager()->remove($news);
$this->getEntityManager()->flush();

感觉这是 方法错误 .

有没有办法将删除文件功能绑定(bind)到 媒体实体每次直接或通过其 parent 删除媒体时都会自动调用它? (即新闻或类别)

最佳答案

找到了解决方案。

这很简单:

首先在 Media 类之前添加注解

/**
* Media
*
* @ORM\Table(name="media")
* @ORM\Entity
* @ORM\HasLifecycleCallbacks <- Add this line
*/
class Media

然后你需要为 上的类添加 2 个函数预删除 发布删除
/**
* @ORM\PreRemove()
*/
public function storeFilenameForRemove()
{
$this->temp = realpath($this->path);
}

/**
* @ORM\PostRemove()
*/
public function removeImg()
{
if (isset($this->temp)) {
unlink($this->temp);
}
}

此函数将被触发:删除之前的第一个(存储文件名)和从数据库中删除实体以删除相关文件之后的第二个。

您还需要定义
private $temp;

那存储文件名。

就是这样。现在,当您删除新闻或新闻类别时,所有相关的媒体文件都将与它的实体一起被删除。

关于optimization - Zend 框架 2 + 学说 : removing media with related Entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17549733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com