CakePHP 3で、ビューにどうやってAuth->Userの情報を表示させようか検討しました。
簡単なのは、
$this->request->getSession()->read(‘Auth.User.name’)
のようにセッション変数から取得することなのですが、コントローラーの制御から外れて、ビューが勝手に値を取得しているような気がしてモヤモヤしていました。
一方、
$this->Auth->user(‘name’)
のような書き方もビューでは出来ないし…
そこで、AppControler.phpのbeforeRenderで値をsetして、ビューから統一的に変数から取得することにしました。
具体的には、AppController.phpに下記のコードを追記します。
public function beforeRender(Event $event) { if ($this->Auth !== null) { $this->set(‘auth_user’, $this->Auth->user()); } else { $this->set(‘auth_user’, null); } } |
また、エラー時に、ErrorControllerでAuthがない、と落ちてしまうので、ErrorController.phpのbeforeRenderにも追記します。
public function beforeRender(Event $event) { //エラーが発生した時にAuthがないnoticeが発生するためnullをセットする $this->Auth = null; parent::beforeRender($event); } |
これで、どのビューでも$auth_user->nameと統一的に扱うことが出来るようになりました。変なこだわりだな、とは思いましたが、スッキリしました。
CakePHP 3.7でのお話でした。