/** * Make the cache key depend on the user culture */ public function generatePageCacheKey($internalUri, $hostName, $vary, $contextualPrefix, sfViewCacheManager $viewCacheManager) { sfConfig::set('sf_cache_namespace_callable', null); $cacheKey = $viewCacheManager->generateCacheKey($internalUri, $hostName, $vary, $contextualPrefix); sfConfig::set('sf_cache_namespace_callable', array($this, 'generatePageCacheKey')); if (strpos($internalUri, '@sf_cache_partial') === 0) { return $cacheKey; } $cacheKey = $this->user->getCulture() . ':' . $cacheKey; sfConfig::set('dm_internal_page_cached', $viewCacheManager->getCache()->has($cacheKey)); return $cacheKey; }
/** * Before checking cache key - saves passed tags * * @see parent::checkCacheKey() * @param array $parameters An array of parameters * @return string The cache key */ public function checkCacheKey(array &$parameters) { $tagsKey = 'sf_cache_tags'; $this->temporaryContentTags = null; if (isset($parameters[$tagsKey])) { $tags = true === sfConfig::get('sf_escaping_strategy') ? sfOutputEscaper::unescape($parameters[$tagsKey]) : $parameters[$tagsKey]; unset($parameters[$tagsKey]); if ($tags) { $this->temporaryContentTags = $tags; } } return parent::checkCacheKey($parameters); }
self::$cache = array(); } } class myRouting extends sfPatternRouting { public function getCurrentInternalUri($with_route_name = false) { return 'currentModule/currentAction?currentKey=currentValue'; } } $context = sfContext::getInstance(array('controller' => 'myController', 'routing' => 'myRouting', 'request' => 'myRequest')); $r = $context->routing; $r->connect('default', new sfRoute('/:module/:action/*')); // ->initialize() $t->diag('->initialize()'); $m = new sfViewCacheManager($context, $cache = new myCache()); $t->is($m->getCache(), $cache, '->initialize() takes a sfCache object as its second argument'); // ->generateCacheKey() $t->diag('->generateCacheKey'); $t->is($m->generateCacheKey('mymodule/myaction'), '/localhost/all/mymodule/myaction', '->generateCacheKey() creates a simple cache key from an internal URI'); $t->is($m->generateCacheKey('mymodule/myaction', 'foo'), '/foo/all/mymodule/myaction', '->generateCacheKey() can take a hostName as second parameter'); $t->is($m->generateCacheKey('mymodule/myaction', null, 'bar'), '/localhost/bar/mymodule/myaction', '->generateCacheKey() can take a serialized set of vary headers as third parameter'); $t->is($m->generateCacheKey('mymodule/myaction?key1=value1&key2=value2'), '/localhost/all/mymodule/myaction/key1/value1/key2/value2', '->generateCacheKey() includes request parameters as key/value pairs'); $t->is($m->generateCacheKey('mymodule/myaction?akey=value1&ckey=value2&bkey=value3'), '/localhost/all/mymodule/myaction/akey/value1/bkey/value3/ckey/value2', '->generateCacheKey() reorders request parameters alphabetically'); try { $m->generateCacheKey('@rule?key=value'); $t->fail('->generateCacheKey() throws an sfException when passed an internal URI with a rule'); } catch (sfException $e) { $t->pass('->generateCacheKey() throws an sfException when passed an internal URI with a rule'); } try {
function get_cache_manager($context) { myCache::clear(); $m = new sfViewCacheManager(); $m->initialize($context, 'myCache'); return $m; }