2017年2月22日
CakePHP2.x AppControllerでModelを呼び出しfind関数を使う方法
使用理由としては、app/View/Elements/header.ctpを用意しており、ヘッダー情報内にログインしたユーザー名、画像を表示するようにセット。
はじめは$this->Auth->user()を利用していたが、これではユーザー情報を編集したときにログアウトしないと情報が更新されないため、直接DBから情報を取得する流れに変えた。
これまではページ数が少なかったので、各コントローラに以下の記述を行っていた。
ChatsController.php
$users2 = $this->Auth->user('id'); $user_info = $this->Chat->User->find('first', array('conditions' => array( 'User.id' => $users2, ))); $this->set('user_info',$user_info);
header.ctp
<div class="userinfoarea"> <p class="user-img"> <?php echo $this -> Html->image('/files/'."{$user_info['User']['img_file']}", array('width' => 50)); ?> </p> <p class="user-name"> ようこそ<br> <?php echo h($user_info['User']['name']); ?>さん </p> </div>
$user2にログインユーザーのidをセットし、find関数でユーザーIDを検索キーに情報を取得し$user_infoにセット。
ctpで表示という流れ。
ページ数が増えると、各コントローラにこの変数定義をそれぞれ行うのは非常に効率が悪いのでAppController.phpのbeforeFilterにセットすることに。
普通に同じように記述してもfindしたけどnullじゃね~!と言われ、var_dumpしても情報なし。
AppController.phpではModelとの接続をしていないらしく、以下の設定が必要とのこと。
public $uses = array('モデル名');
今回はusersテーブルを見に行くので以下のように記述。
public $uses = array('User');
後は、AppController.php用に記述を少し変更
$users2 = $this->Auth->user('id'); $user_info = $this->User->find('first', array('conditions' => array( 'User.id' => $users2, ))); $this->set('user_info',$user_info);
以上。
コメントを書く