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