configの設定以外でのキャッシュの使用方法
今までは、configの設定に従ってキャッシュを使用してきていましたが、
今回はconfigの設定とは異なる設定で、キャッシュを使用する方法です。
以下が、configの設定とは異なる内容での使用方法の例です。
コントローラー
public function action_forge()
{
// ここで使用するストレージ名と設定内容を記述する、
// ここで設定しなかった、項目についてはcacheのconfigファイルの内容で設定される。
// 「$config = 'file';」のように、ストレージ名のみを文字列で渡して使用する事も可能
$config = array(
'driver' => 'file',
'expiration' => null,
'file' => array(
'path' => APPPATH.'cache_forge'.DS,
),
);
// String
$cache = Cache::forge('string', $config);
$cache->set('cache test');
$data['string'] = $cache->get();
// Array
$a = array(1, 2, array('key' => 'value'));
$cache = Cache::forge('array', $config);
$cache->set($a);
$data['array'] = $cache->get();
// Object
$o = new Library_Test();
$cache = Cache::forge('object', $config);
$cache->set($o);
$data['object'] = $cache->get();
return Response::forge(View::forge('cache/forge', $data));
}
(configの設定は、fileストレージの動作を確認した時と同様にしてあります)
14,20,26行目のように、Cacheクラスのforgeメソッドを使用してCacheクラスのインスタンスを生成すると、
第2引数で渡したconfigの設定内容でキャッシュストレージに接続に行きます。
動作後のデータを確認すると、ちゃんとキャシュの情報は「cache」ではなく「cache_forge」フォルダに生成されています。
第1引数はキャッシュのキーです。
なんとなく違和感を感じる設定だな…。
キャッシュクラスのインスタンスを生成する時に使用するキー値を設定しているので、すごく違和感があります。なぜ「get」「set」などのメソッドの引数に、キャッシュのキーを取るようになぜ設計されていないのかすごく不思議です。
ちなみにコメントにも記述していますが、第2引数のconfigは配列でなく、ストレージ名を文字列で渡しても大丈夫です。
その場合、設定されていないconfigの情報はcacheのconfigから取得するようになります。
次回は、Redisのストレージを使用している時に気がついた、cacheのsectionについてまとめてみたいと思います。