CakePHP2.x ユーザが登録したアイコンを表示してなければデフォルトアイコンを表示したく、やってみて上手くいった方法を記録しておきます。
環境CakePHP2.10.2
コントローラー
/**
* ユーザアイコンの表示
*
* @param int $userId
* @return
*/
public function showUsersIcon($userId) {
$this->layout = false;
$usersIcon = $this->UsersIcon->findByUserId($userId);
if (empty($usersIcon)) {
// ユーザアイコンを保有しないユーザのデフォルトアイコン
if ($this->User->exists($userId)) {
header('Content-type: image/jpeg');
readfile('img/user_default_icon.png');
exit;
}
throw new NotFoundException(Configure::read('404_message'));
}
header('Content-type: image/jpeg');
echo $usersIcon['UsersIcon']['user_icon'];
}
ちょっと解説です。
デフォルトユーザアイコンはwebrootのimgディレクトリにあるので以下の指定でビューに渡せました。
header(‘Content-type: image/jpeg’);
readfile(‘img/user_default_icon.png’);
exit;
ユーザアイコンがあるユーザは以下でビューにDBに保存してある画像を渡せます。
header(‘Content-type: image/jpeg’);
echo $usersIcon[‘UsersIcon’][‘user_icon’];
DBに保存ではない場合はデフォルトユーザアイコンと同じやり方でいけます。
ビュー
<?php
$imageTag = $this->Html->image('/users/showUsersIcon/' . $userId, array('class' => 'user_icon'));
echo $this->Html->link($imageTag, array('controller' => 'users', 'action' => 'view', 'id' => $userId, array('escape' => false));
?>
ビュー側では以下のタグを生成するだけです。
<img src=”/users/showUsersIcon/1″>
画像の格納先がDBでもファイルでもビューはこれで大丈夫です。
完

