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');