CakePHP Cookieコンポーネントの改良(ちょっとだけ)

標準

cakephpにはCookieコンポーネントがあります。
http://book.cakephp.org/ja/view/177/Cookies

これを利用すると、cookieの管理が楽にできたり格納値の暗号化ぽいことができるのですが、設定方法がController::beforeFilter()での設定となり、ちょっとスマートじゃないなと思ったのでひと工夫。

controlers/components/app_cookie.phpとして、CookieComponentを継承したものを作成します。

< ?php
App::import('component', 'Cookie');
class AppCookieComponent extends CookieComponent
{
    /**
     * (non-PHPdoc)
     * @see cake/libs/controller/components/CookieComponent#initialize($controller, $settings)
     */
    function initialize(&$controller, $settings) {
        $config = Configure::read('Cookie');
        if (!empty($config) && is_array($settings) && is_array($config)) {
            $settings = array_merge($settings, $config);
        }
        parent::initialize($controller, $settings);
    }
}
?>

単純に、Configure::readを付け加えただけなんですが、これで config/core.php等で、

Configure::write('Cookie.name', 'AppCookieName');
Configure::write('Cookie.time', '+2 weeks');

と言った形で、設定できるので幾分スマートかなと。

利用する場合は、通常のCookieコンポーネントの代わりにAppCookieを利用するだけ。

    var $components = array('AppCookie');
    function some()
    {
            $this->AppCookie->write('key', 'value');
    }

それと、Model等でもCookie処理を行いたかったので、下記のようなvendors/cake_cookie.phpを作成。
# Modelでhttpレスポンスを返していいのかという問題はさておき。。

< ?php
App::import('component', 'AppCookie');
class CakeCookie extends AppCookieComponent
{
    /**
     *
     * @return unknown_type
     */
    function __construct()
    {
        $this->initialize(new Object(), array());
        $this->startup();
    }
}

使うときはこんな感じ。

App::import('vendor', 'CakeCookie');
$cookie = new CakeCookie();
$cookie->write('key', 'value');

コメントを残す

Page optimized by WP Minify WordPress Plugin