Cakephp3でも$this->Auth->user()を使いたい!

Cakephp2系から3系へ移行した直後の方へシリーズ



$this->Auth->user()がCake3系にないのでヘルパーを作る。

幸いにも既にAuthHelperを作った方がおられるので、userメソッドだけ拡張させていただく

<?php
/**
 * AuthHelper: Authの変数にアクセスできる
 * @usage $this->Auth->get('Admin.id'), $this->Auth->get('User.email')
 * @usage $this->Auth->user(), $this->Auth->user('email')
 */
namespace App\View\Helper;
use Cake\View\Helper;
use Cake\Controller\Component;
class AuthHelper extends Helper
{
    /**
     * The current user, used for stateless authentication when
     * sessions are not available.
     *
     * @var array
     */
    protected $_user = null;
    /**
     * Initialize current user from session data
     * before rendering view.
     *
     * @return void
     */
    public function Initialize(array $config)
    {
        $this->_user = $this->request->Session()->read('Auth');
    }
    /**
     * Get the current user.
     *
     * @param  string $key field to retrieve. Leave null to get entire User record
     * @return array|null Either User record or null if no user is logged in.
     */
    public function get($key = null)
    {
        if( empty($key) ) {
            return $this->_user;
        }
        if( strpos($key, '.') !== false ) {
            list($sessionKey, $field) = explode('.', $key);
            return isset($this->_user[$sessionKey][$field]) ? $this->_user[$sessionKey][$field] : null;
        }
        return null;
    }

    public function user($key = null){
        return $this->get('User.'.$key);
    }
}

認証用ユーザーモデルがUserModelじゃない時はuser関数を
return $this->get('MyUser.'.$key);
で任意に書き換えてください。

しかしCakephp3系のコンセプトに真っ向から歯向かう改修ではある
(データ取得メソッドはgetつかってわかりやすく〜的なやつ)