Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 31 |
TwigPhpStorageCache | |
0.00% |
0 / 1 |
|
0.00% |
0 / 6 |
90 | |
0.00% |
0 / 31 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
storage | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 5 |
|||
generateKey | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 9 |
|||
load | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
write | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 4 |
|||
getTimestamp | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Template\TwigPhpStorageCache. | |
*/ | |
namespace Drupal\Core\Template; | |
use Drupal\Core\Cache\CacheBackendInterface; | |
use Drupal\Core\PhpStorage\PhpStorageFactory; | |
/** | |
* Provides an alternate cache storage for Twig using PhpStorage. | |
* | |
* This class is designed to work on setups with multiple webheads using a local | |
* filesystem for the twig cache. When generating the cache key, a hash value | |
* depending on the enabled extensions is included. This prevents stale | |
* templates from being reused when twig extensions are enabled or disabled. | |
* | |
* @see \Drupal\Core\DependencyInjection\Compiler\TwigExtensionPass | |
*/ | |
class TwigPhpStorageCache implements \Twig_CacheInterface { | |
/** | |
* The cache object used for auto-refresh via mtime. | |
* | |
* @var \Drupal\Core\Cache\CacheBackendInterface | |
*/ | |
protected $cache; | |
/** | |
* The PhpStorage object used for storing the templates. | |
* | |
* @var \Drupal\Component\PhpStorage\PhpStorageInterface | |
*/ | |
protected $storage; | |
/** | |
* The template cache filename prefix. | |
* | |
* @var string | |
*/ | |
protected $templateCacheFilenamePrefix; | |
/** | |
* Store cache backend and other information internally. | |
* | |
* @param \Drupal\Core\Cache\CacheBackendInterface $cache | |
* The cache bin. | |
* @param string $twig_extension_hash | |
* The Twig extension hash. | |
*/ | |
public function __construct(CacheBackendInterface $cache, $twig_extension_hash) { | |
$this->cache = $cache; | |
$this->templateCacheFilenamePrefix = $twig_extension_hash; | |
} | |
/** | |
* Gets the PHP code storage object to use for the compiled Twig files. | |
* | |
* @return \Drupal\Component\PhpStorage\PhpStorageInterface | |
*/ | |
protected function storage() { | |
if (!isset($this->storage)) { | |
$this->storage = PhpStorageFactory::get('twig'); | |
} | |
return $this->storage; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function generateKey($name, $className) { | |
$hash = hash('sha256', $className); | |
if (strpos($name, '{# inline_template_start #}') === 0) { | |
// $name is an inline template, and can have characters that are not valid | |
// for a filename. $hash is unique for each inline template so we just use | |
// the generic name 'inline-template' here. | |
$name = 'inline-template'; | |
} | |
else { | |
$name = basename($name); | |
} | |
// The first part is what is invalidated. | |
return $this->templateCacheFilenamePrefix . '_' . $name . '_' . $hash; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function load($key) { | |
$this->storage()->load($key); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function write($key, $content) { | |
$this->storage()->save($key, $content); | |
// Save the last mtime. | |
$cid = 'twig:' . $key; | |
$this->cache->set($cid, REQUEST_TIME); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getTimestamp($key) { | |
$cid = 'twig:' . $key; | |
if ($cache = $this->cache->get($cid)) { | |
return $cache->data; | |
} | |
else { | |
return 0; | |
} | |
} | |
} |