CakePHP2のアップロードプラグイン「Upload」で画像を上げ直す処理を書いてみた

こんにちは!

今日はCakePHP2のプラグインである「Upload」プラグインで画像をあげなおす処理を書いてみます。
結果的に無理矢理感が出てしまってますが、とりあえず実装は出来るってことでw
綺麗に書きたい〜〜

Uploadプラグインが動くまで設定

以前Uploadプラグインの記事を書いたのでこれの途中までやってみてください。

CakePHP2で画像アップロードプラグインである「Upload」を試してみた

コードを書く

それでは早速書いていきます。
まずはControllerから

UserController.php

request->is(['post', 'put'])){
            if($this->User->createWithImage($this->request->data)){
                $this->Session->setFlash(__('編集'));
                return $this->redirect(['controller'=>'user', 'action'=>'index']);
            }
        }

        if(!$this->request->data){
            $this->request->data = $this->User->find('first');
        }
    }
}

そしてModel

User.php

 [
            'image'
        ]
    ];

    public function createWithImage($data){
        if(!empty($data[$this->alias]['image']['name']) && !empty($data[$this->alias]['id'])){
            $data[$this->alias]['image']['remove'] = true;
        }

        $this->create();
        if($this->saveAll($data)){

            // removeフラグを消して画像を保存する
            if(isset($data[$this->alias]['image']['remove'])){
                unset($data[$this->alias]['image']['remove']);
            }

            if($this->saveAll($data)){
                return true;
            }
        }
    }

}

最後にView
View/User/index.ctp

Form->create('User', ['type'=>'file']);
echo $this->Form->input('image', ['type'=>'file']);
if(isset($this->data['User']['image'])){
    echo $this->Html->image('../file/user/'.$this->data['User']['id'].'/'.$this->data['User']['image']);
}

echo $this->Form->hidden('id');
?>

一番大切な部分はModelのとこの

$data[$this->alias]['image']['remove'] = true;

です。これを指定して保存するとテキストデータ等は保存されますが、画像データは消去されます。

このことに関するドキュメントはこちら
Remove a current file without deleting the entire record

一度消去したあとに remove フィールドを消して保存しなおすことで画像アップロードをもう一度行って画像の入れ替えを行いました。

ごりごりですけど一応わかりやすいかなぁと思います!

最後に

お疲れ様でした!
やっぱりプラグインを使ってアップロード処理を外にまかせているととても楽ですね。
remove フラグがあるおかげで色々なことが柔軟に出来る気がします。
参考になれば!!