Source of file AssetCache.php
Size: 4,204 Bytes - Last Modified: 2013-06-02T00:13:43+02:00
/home/theseer/Downloads/Symfony/vendor/kriswallsmith/assetic/src/Assetic/Asset/AssetCache.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | <?php /* * This file is part of the Assetic package, an OpenSky project. * * (c) 2010-2013 OpenSky Project Inc * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Assetic\Asset; use Assetic\Cache\CacheInterface; use Assetic\Filter\FilterInterface; use Assetic\Filter\HashableInterface; /** * Caches an asset to avoid the cost of loading and dumping. * * @author Kris Wallsmith <kris.wallsmith@gmail.com> */ class AssetCache implements AssetInterface { private $asset; private $cache; public function __construct(AssetInterface $asset, CacheInterface $cache) { $this->asset = $asset; $this->cache = $cache; } public function ensureFilter(FilterInterface $filter) { $this->asset->ensureFilter($filter); } public function getFilters() { return $this->asset->getFilters(); } public function clearFilters() { $this->asset->clearFilters(); } public function load(FilterInterface $additionalFilter = null) { $cacheKey = self::getCacheKey($this->asset, $additionalFilter, 'load'); if ($this->cache->has($cacheKey)) { $this->asset->setContent($this->cache->get($cacheKey)); return; } $this->asset->load($additionalFilter); $this->cache->set($cacheKey, $this->asset->getContent()); } public function dump(FilterInterface $additionalFilter = null) { $cacheKey = self::getCacheKey($this->asset, $additionalFilter, 'dump'); if ($this->cache->has($cacheKey)) { return $this->cache->get($cacheKey); } $content = $this->asset->dump($additionalFilter); $this->cache->set($cacheKey, $content); return $content; } public function getContent() { return $this->asset->getContent(); } public function setContent($content) { $this->asset->setContent($content); } public function getSourceRoot() { return $this->asset->getSourceRoot(); } public function getSourcePath() { return $this->asset->getSourcePath(); } public function getTargetPath() { return $this->asset->getTargetPath(); } public function setTargetPath($targetPath) { $this->asset->setTargetPath($targetPath); } public function getLastModified() { return $this->asset->getLastModified(); } public function getVars() { return $this->asset->getVars(); } public function setValues(array $values) { $this->asset->setValues($values); } public function getValues() { return $this->asset->getValues(); } /** * Returns a cache key for the current asset. * * The key is composed of everything but an asset's content: * * * source root * * source path * * target url * * last modified * * filters * * @param AssetInterface $asset The asset * @param FilterInterface $additionalFilter Any additional filter being applied * @param string $salt Salt for the key * * @return string A key for identifying the current asset */ private static function getCacheKey(AssetInterface $asset, FilterInterface $additionalFilter = null, $salt = '') { if ($additionalFilter) { $asset = clone $asset; $asset->ensureFilter($additionalFilter); } $cacheKey = $asset->getSourceRoot(); $cacheKey .= $asset->getSourcePath(); $cacheKey .= $asset->getTargetPath(); $cacheKey .= $asset->getLastModified(); foreach ($asset->getFilters() as $filter) { if ($filter instanceof HashableInterface) { $cacheKey .= $filter->hash(); } else { $cacheKey .= serialize($filter); } } if ($values = $asset->getValues()) { asort($values); $cacheKey .= serialize($values); } return md5($cacheKey.$salt); } } |