1

编辑:更新我的问题以获得更多澄清

==================================================== ========

我使用MeioUpload 上传图片。图片位置放置在 DBusers表中image,如下所示:/img/uploads/users/img/picture34.png.

当一个用户被删除时,CakePHP 也会从该图像中访问该图像的物理位置User.image并删除该图像。

这里没有belongTo/HasMany 关系,因为我没有图像模型/控制器。

如何防止 CakePHP 物理删除此图像?

==================================================== ========

admin_delete在我的应用程序中,我可以选择使用users_controller.php. 但是,当调用此函数时(见以下函数),保存在 DB 中的图像也会被删除。如何防止此功能删除图像。

function admin_delete($id = null) {

    if (!$id) {
        $this->Session->setFlash(__('Este usuario nao existe', true));
        $this->redirect(array('action'=>'index'));
    }

    if ($this->User->delete($id)) {
        $this->Session->setFlash(__('Este usuario ja foi removido', true));
        $this->redirect(array('action'=>'index'));
    }

    $this->Session->setFlash(__('Este usuario nao foi removido', true));
    $this->redirect(array('action' => 'index'));
}

谢谢,

4

1 回答 1

1

编辑

Meiupload 行为定义了这个 beforeDelete 方法:

/**
 * Deletes all files associated with the record beforing delete it.
 *
 * @author Vinicius Mendes
 * @param $model Object
 */
function beforeDelete(&$model) {
    $model->read(null, $model->id);
    if(isset($model->data)) {
        foreach($this->__fields as $field=>$options) {
            $file = $model->data[$model->name][$field];
            if($file && $file != $options['default'])
                $this->_deleteFiles($file, $options['dir']);
        }
    }
    return true;
}

由于没有不删除图像的选项,我认为唯一的方法是暂时分离行为。无法测试它,但这样的东西可以工作:

function admin_delete($id = null) {
    $this->User->Behaviors->disable('MeioUpload');

    // your code

    $this->User->Behaviors->enable('MeioUpload');
}

===

我假设图像通过 belongsTo/hasMany 关联与用户模型相关联?在这种情况下,标准的 delete 方法有一个参数来避免删除关联数据,这里是 delete 函数的定义:

delete(int $id = null, boolean $cascade = true);

如果您将cascade设置为 false,则关联的图像不会被删除:

if ($this->User->delete($id,false)) {
    $this->Session->setFlash(__('Este usuario ja foi removido', true));
    $this->redirect(array('action'=>'index'));
}
于 2012-04-22T14:05:07.357 回答