プロフィール画像の削除処理をつくるぞ(CakePHP修行 #29)

SPONSORED LINK

Pocket

さて次にプロフィール画像の削除処理を作ります。仕様は↓のような感じ。

  • 写真がアップされている場合、設定変更画面(/users/edit/)で「削除する?」のチェックボックスを表示。
  • 写真がアップされていない場合、設定変更画面(/users/edit/)でチェックボックスを表示しない。

■ 画面を作る

画面はこんな感じで。画像がアップされているときだけチェックボックスが出ます。なお、現在の画像も合わせて表示させます。

pic_delete.gif

↑ 画像がアップされていないときは画像とチェックボックスは非表示。

edit.thtmlはこんな感じ(該当部分だけ)。

<?php if (!empty($me['User']['pic'])) { ?>
<tr>
<tr valign="top">
<td align="right">&nbsp;</td>
<td><img src="/pics/<?= $me['User']['pic']; ?>" width="50" height="50" border="0" alt="" /> <?= $html->checkbox('User/pic_del', array('value'=>'1')); ?> delete this?</td>
</tr>
<?php } else { ?>
<?= $html->hidden('User/pic_del', array('value'=>'0')); ?>
<?php } ?>

ちなみに画像がアップされていないときはhidden属性でUser/pic_delを0にしています。これはusers_controller.phpで吸収したほうがよかったのだろうか。どうだろ?

■ コントローラーの処理

で、そのusers_controller.phpですが、次のとおりです。

// file delete
if (empty($this->data['User']['pic']['name']) && file_exists(WWW_ROOT."pics".DS.$me['User']['pic']) && $this->data['User']['pic_del'])
{
  unlink(WWW_ROOT."pics".DS.$me['User']['pic']);
  $this->data['User']['pic'] = null;
}

画像のファイル名が入っていなくて、該当するファイルが存在して、pic_del項目がTrueの場合に削除処理をするようにしています。逆をいえば、削除チェックボックスにチェックがあっても、画像のファイル名が指定されていれば画像のアップ処理を優先させるということですね。これはこれでいいすよね。エラーを出そうとも思いましたが、まぁ、いいでしょう。

そんなところですかね。テストもうまくいったし、これはこれでいいかな。次は画像のエラー処理にいきたい。ファイルサイズチェックして大きなファイルははじきたいと思います。そのあとは画像縮小処理かな。

※ CakePHP修業は百式管理人がSNSっぽいものをCakePHPで作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。

ツイッターもやっています!

SPONSORED LINK

  1. No comments yet.

  1. No trackbacks yet.