Compiler.php
TLDR
The Compiler.php
file contains the Compiler
class, which is an abstract class used for compiling views in the Illuminate\View\Compilers namespace. It has methods for getting the path to the compiled version of a view, determining if a view is expired, and creating the compiled file directory if necessary.
Classes
Compiler
The Compiler
class is an abstract class that provides basic functionality for compiling views. It has the following properties:
-
$files
: The filesystem instance used for file operations. -
$cachePath
: The cache path for the compiled views. -
$basePath
: The base path that should be removed from paths before hashing. -
$shouldCache
: Determines if compiled views should be cached. -
$compiledExtension
: The compiled view file extension.
The class defines the following methods:
-
__construct(Filesystem $files, string $cachePath, string $basePath = '', bool $shouldCache = true, string $compiledExtension = 'php')
: The constructor method that initializes the class properties. -
getCompiledPath(string $path): string
: Returns the path to the compiled version of a view. -
isExpired(string $path): bool
: Determines if the view at the given path is expired. -
ensureCompiledDirectoryExists(string $path): void
: Creates the compiled file directory if necessary.
<?php
namespace Illuminate\View\Compilers;
use ErrorException;
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.'/'.hash('xxh128', 'v2'.Str::after($path, $this->basePath)).'.'.$this->compiledExtension;
}
/**
* Determine if the view at the given path is expired.
*
* @param string $path
* @return bool
*
* @throws \ErrorException
*/
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;
}
try {
return $this->files->lastModified($path) >=
$this->files->lastModified($compiled);
} catch (ErrorException $exception) {
if (! $this->files->exists($compiled)) {
return true;
}
throw $exception;
}
}
/**
* 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);
}
}
}