CakePHP2.x ユーザが登録したアイコンを表示してなければデフォルトアイコンを表示したい

CakePHP2.x ユーザが登録したアイコンを表示してなければデフォルトアイコンを表示したい

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でもファイルでもビューはこれで大丈夫です。

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です