125 lines
3.0 KiB
PHP
125 lines
3.0 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Illuminate\View\Compilers;
|
||
|
|
||
|
use Illuminate\Filesystem\Filesystem;
|
||
|
use Illuminate\Support\Str;
|
||
|
use InvalidArgumentException;
|
||
|
|
||
|
abstract class Compiler
|
||
|
{
|
||
|
/**
|
||
|
* The filesystem instance.
|
||
|
*
|
||
|
* @var \Illuminate\Filesystem\Filesystem
|
||
|
*/
|
||
|
protected $files;
|
||
|
|
||
|
/**
|
||
|
* The cache path for the compiled views.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $cachePath;
|
||
|
|
||
|
/**
|
||
|
* The base path that should be removed from paths before hashing.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $basePath;
|
||
|
|
||
|
/**
|
||
|
* Determines if compiled views should be cached.
|
||
|
*
|
||
|
* @var bool
|
||
|
*/
|
||
|
protected $shouldCache;
|
||
|
|
||
|
/**
|
||
|
* The compiled view file extension.
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
protected $compiledExtension = 'php';
|
||
|
|
||
|
/**
|
||
|
* Create a new compiler instance.
|
||
|
*
|
||
|
* @param \Illuminate\Filesystem\Filesystem $files
|
||
|
* @param string $cachePath
|
||
|
* @param string $basePath
|
||
|
* @param bool $shouldCache
|
||
|
* @param string $compiledExtension
|
||
|
* @return void
|
||
|
*
|
||
|
* @throws \InvalidArgumentException
|
||
|
*/
|
||
|
public function __construct(
|
||
|
Filesystem $files,
|
||
|
$cachePath,
|
||
|
$basePath = '',
|
||
|
$shouldCache = true,
|
||
|
$compiledExtension = 'php')
|
||
|
{
|
||
|
if (! $cachePath) {
|
||
|
throw new InvalidArgumentException('Please provide a valid cache path.');
|
||
|
}
|
||
|
|
||
|
$this->files = $files;
|
||
|
$this->cachePath = $cachePath;
|
||
|
$this->basePath = $basePath;
|
||
|
$this->shouldCache = $shouldCache;
|
||
|
$this->compiledExtension = $compiledExtension;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the path to the compiled version of a view.
|
||
|
*
|
||
|
* @param string $path
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getCompiledPath($path)
|
||
|
{
|
||
|
return $this->cachePath.'/'.sha1('v2'.Str::after($path, $this->basePath)).'.'.$this->compiledExtension;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Determine if the view at the given path is expired.
|
||
|
*
|
||
|
* @param string $path
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isExpired($path)
|
||
|
{
|
||
|
if (! $this->shouldCache) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
$compiled = $this->getCompiledPath($path);
|
||
|
|
||
|
// If the compiled file doesn't exist we will indicate that the view is expired
|
||
|
// so that it can be re-compiled. Else, we will verify the last modification
|
||
|
// of the views is less than the modification times of the compiled views.
|
||
|
if (! $this->files->exists($compiled)) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return $this->files->lastModified($path) >=
|
||
|
$this->files->lastModified($compiled);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create the compiled file directory if necessary.
|
||
|
*
|
||
|
* @param string $path
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function ensureCompiledDirectoryExists($path)
|
||
|
{
|
||
|
if (! $this->files->exists(dirname($path))) {
|
||
|
$this->files->makeDirectory(dirname($path), 0777, true, true);
|
||
|
}
|
||
|
}
|
||
|
}
|