public function testToKey() { $data = ['local_cacheNtb\\User.1' => 'local_cacheNtb_User_1', 'local_cacheNtb\\User.1' => 'local_cacheNtb_User_1', 'local_cacheNtb-User-1' => 'local_cacheNtb_User_1']; foreach ($data as $input => $expected) { $this->assertEquals($expected, CacheHelper::to_key($input)); } }
/** * FixMe: Currently only db and has_one fields are cached. * @param string|int $identifier an identifier which will be used for key generation * @param callable $callback the function which can be called to fetch the data * @return DataObject */ protected function cache($identifier, $callback) { $serializer = CacheHelper::get_serializer(); // check for cacheable extension of data object class $className = $this->dataClass; if (Object::has_extension($className, 'CacheableExtension')) { // search in cache $cache = CacheHelper::get_cache(); $key = CacheHelper::to_key("{$className}.{$identifier}"); if ($data = $cache->load($key)) { return $serializer->deserialize($data); } else { // if not found in cache, perform callback $data = $callback(); if (!$data) { // if result is empty, return null return null; } $cachedFunctions = array_keys($data->hasOne()); foreach ($cachedFunctions as $fn) { $data->{$fn}(); } $cache->save($serializer->serialize($data), $key); // return result return $data; } } else { return $callback(); } }
private function key() { $name = $this->ownerBaseClass; $id = $this->Identifier(); return CacheHelper::to_key("{$name}.{$id}"); }