こんにちは!
今日は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 フラグがあるおかげで色々なことが柔軟に出来る気がします。 参考になれば!!
Webアプリ開発を加速する CakePHP2定番レシピ119
posted with amazlet at 14.01.27
長谷川 智希
秀和システム
売り上げランキング: 59,220
秀和システム
売り上げランキング: 59,220
