Вход Регистрация
Файл: symfony-2.7/src/Symfony/Component/Templating/Loader/CacheLoader.php
Строк: 103
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentTemplatingLoader;

use 
SymfonyComponentTemplatingStorageStorage;
use 
SymfonyComponentTemplatingStorageFileStorage;
use 
SymfonyComponentTemplatingTemplateReferenceInterface;

/**
 * CacheLoader is a loader that caches other loaders responses
 * on the filesystem.
 *
 * This cache only caches on disk to allow PHP accelerators to cache the opcodes.
 * All other mechanism would imply the use of `eval()`.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class CacheLoader extends Loader
{
    protected 
$loader;
    protected 
$dir;

    
/**
     * Constructor.
     *
     * @param LoaderInterface $loader A Loader instance
     * @param string          $dir    The directory where to store the cache files
     */
    
public function __construct(LoaderInterface $loader$dir)
    {
        
$this->loader $loader;
        
$this->dir $dir;
    }

    
/**
     * Loads a template.
     *
     * @param TemplateReferenceInterface $template A template
     *
     * @return Storage|bool false if the template cannot be loaded, a Storage instance otherwise
     */
    
public function load(TemplateReferenceInterface $template)
    {
        
$key hash('sha256'$template->getLogicalName());
        
$dir $this->dir.DIRECTORY_SEPARATOR.substr($key02);
        
$file substr($key2).'.tpl';
        
$path $dir.DIRECTORY_SEPARATOR.$file;

        if (
is_file($path)) {
            if (
null !== $this->logger) {
                
$this->logger->debug('Fetching template from cache.', array('name' => $template->get('name')));
            } elseif (
null !== $this->debugger) {
                
// just for BC, to be removed in 3.0
                
$this->debugger->log(sprintf('Fetching template "%s" from cache.'$template->get('name')));
            }

            return new 
FileStorage($path);
        }

        if (
false === $storage $this->loader->load($template)) {
            return 
false;
        }

        
$content $storage->getContent();

        if (!
is_dir($dir)) {
            
mkdir($dir0777true);
        }

        
file_put_contents($path$content);

        if (
null !== $this->logger) {
            
$this->logger->debug('Storing template in cache.', array('name' => $template->get('name')));
        } elseif (
null !== $this->debugger) {
            
// just for BC, to be removed in 3.0
            
$this->debugger->log(sprintf('Storing template "%s" in cache.'$template->get('name')));
        }

        return new 
FileStorage($path);
    }

    
/**
     * Returns true if the template is still fresh.
     *
     * @param TemplateReferenceInterface $template A template
     * @param int                        $time     The last modification time of the cached template (timestamp)
     *
     * @return bool
     */
    
public function isFresh(TemplateReferenceInterface $template$time)
    {
        return 
$this->loader->isFresh($template$time);
    }
}
Онлайн: 2
Реклама