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

編集

Meiouploadの動作は、次の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(int $id = null, boolean $cascade = true);

if you set cascade to false you associated image doesn't get deleted:

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 に答える