仅在事务提交时删除文件

时间:2018-06-27 09:36:08

标签: cakephp cakephp-2.9

我有一个Attachment模型,该模型存储MySQL中的文件元数据和文件系统上的实际文件。我已经使用Callback Methods实现了删除:

public function beforeDelete($cascade = true) {
    $this->data = $this->findById($this->id);
    return parent::beforeDelete($cascade);
}

public function afterDelete() {
    $file = new File($this->data['Attachment']['path']);
    $file->delete();
}

是否有办法确定是否有未完成的事务,并且仅在提交事务后才执行文件系统删除? (交易当然是在控制器中处理的,它甚至可能不是AttachmentsCrontroller而是其他一些。)

1 个答案:

答案 0 :(得分:1)

在CakePHP 3.x中,这已经有些棘手了,在提交事件之后会有实际事件,并且在整个保存/删除过程中传递选项对象,这些对象可以存储有关交易的信息,甚至在那里如果您要在事务中手动包装保存/删除操作,则必须以某种方式自己调用此过程。

例如,您可以尝试在一个行为中实现事务性执行事情,然后您的模型可以在该beforeDelete上的行为中存储要删除的文件的引用,并且该行为可以在事件发生后在所涉及的模型上调度事件已提交,例如afterCommit,您的模型可以侦听然后删除文件。