mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Merge pull request #1704 from cakephp/2.5-cache
2.5 - Add Cache::remember()
This commit is contained in:
commit
9472b3149b
2 changed files with 60 additions and 0 deletions
|
@ -542,4 +542,38 @@ class Cache {
|
|||
throw new CacheException(__d('cake_dev', 'Invalid cache group %s', $group));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides the ability to easily do read-through caching.
|
||||
*
|
||||
* When called if the $key is not set in $config, the $callable function
|
||||
* will be invoked. The results will then be stored into the cache config
|
||||
* at key.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* Using a Closure to provide data, assume $this is a Model:
|
||||
*
|
||||
* {{{
|
||||
* $model = $this;
|
||||
* $results = Cache::remember('all_articles', function() use ($model) {
|
||||
* return $model->find('all');
|
||||
* });
|
||||
* }}}
|
||||
*
|
||||
* @param string $key The cache key to read/store data at.
|
||||
* @param callable $callable The callable that provides data in the case when
|
||||
* the cache key is empty. Can be any callable type supported by your PHP.
|
||||
* @param string $config The cache configuration to use for this operation.
|
||||
* Defaults to default.
|
||||
*/
|
||||
public static function remember($key, $callable, $config = 'default') {
|
||||
$existing = self::read($key, $config);
|
||||
if ($existing !== false) {
|
||||
return $existing;
|
||||
}
|
||||
$results = call_user_func($callable);
|
||||
self::write($key, $results, $config);
|
||||
return $results;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,6 +27,8 @@ App::uses('Cache', 'Cache');
|
|||
*/
|
||||
class CacheTest extends CakeTestCase {
|
||||
|
||||
protected $_count = 0;
|
||||
|
||||
/**
|
||||
* setUp method
|
||||
*
|
||||
|
@ -491,4 +493,28 @@ class CacheTest extends CakeTestCase {
|
|||
$this->assertEquals('test_file_', $settings['prefix']);
|
||||
$this->assertEquals(strtotime('+1 year') - time(), $settings['duration']);
|
||||
}
|
||||
|
||||
/**
|
||||
* test remember method.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testRemember() {
|
||||
$expected = 'This is some data 0';
|
||||
$result = Cache::remember('test_key', array($this, 'cacher'), 'default');
|
||||
$this->assertEquals($expected, $result);
|
||||
|
||||
$this->_count = 1;
|
||||
$result = Cache::remember('test_key', array($this, 'cacher'), 'default');
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for testing Cache::remember()
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function cacher() {
|
||||
return 'This is some data ' . $this->_count;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue