Engine
in package
A class that serves as a templating engine for view files.
This templating engine is based on regular expression.
Templating tags:
- Create a block
{! @block name !}
...{! @endblock !}
, use{! @super !}
to inherit parent block. - Print a block
{! @block(name) !}
. - Extend a file
{! @extends 'theme/layouts/file' !}
, blocks of this file will be inherited. - Include a file
{! @include 'theme/includes/file' !}
, this will get rendered before inclusion. - Embed a file
{! @embed 'theme/components/file' !}
, this will be included as is. - Control structures
{! @if ($var) !}
...{! @endif !}
,{! @foreach($vars as $var) !}
...{! @endforeach !}
. - Variable assignments
{! $var = '' !}
, content can be a variable or any valid PHP expression. - Print a variable
{{ $var }}
, content can be a variable or any PHP expression that can be casted to a string. - Print a variable without escaping
{{{ $var }}}
, content can be a variable or any PHP expression that can be casted to a string. - Comment something
{# This is a comment #}
, this will be a PHP comment (will not be available in final HTML).
Tags
Table of Contents
- REGEX = ['dependency' => '/{!\s*@(extends|embed)\s+['"]?(.*?)['"]?\s*!}/s', 'include' => '/{!\s*@include\s+['"]?(.*?)['"]?\s*!}/s', 'block' => '/{!\s*@block\s+(.*?)\s*!}(.*?){!\s*@endblock\s*!}(?!.+{!\s*@endblock\s*!})/s', 'block.child' => '/{!\s*@block\s+.*?\s*!}.*({!\s*@block\s+(.*?)\s*!}(.*?){!\s*@endblock\s*!}).*{!\s*@endblock\s*!}/s', 'block.print' => '/{!\s*@block\((.*?)\)\s*!}/s', 'block.super' => '/{!\s*@super\s*!}/s', 'php' => '/{!\s*(.+?)\s*!}/s', 'comment' => '/{#\s*(.+?)\s*#}/s', 'controlStructure' => '/@(if|else|elseif|endif|do|while|endwhile|for|endfor|foreach|endforeach|continue|switch|endswitch|break|return|require|include)/s', 'controlStructure.start' => '/^@(if|else|elseif|while|for|foreach|switch)/s', 'controlStructure.end' => '/@(endif|endwhile|endfor|endforeach|endswitch)$/s', 'print' => '/{{\s*(.+?)\s*}}/s', 'print.unescaped' => '/{{{\s*(.+?)\s*}}}/s']
- Regular expressions for syntax tokens.
- $debug : bool
- Whether or not to add debugging info to the compiled template.
- $cache : bool
- Whether or not to cache compiled template files.
- $cacheDirectory : string
- Template files cache directory.
- $templatesDirectory : string
- Template files directory.
- $templatesFileExtension : string
- Template files file extension.
- $blocks : array<string|int, mixed>
- Currently captured template blocks.
- __construct() : mixed
- Class constructor.
- clearCache() : void
- getCompiledContent() : string
- Compiles a template file and returns the result after compilation.
- getCompiledFile() : string
- Compiles a template file and returns the path to the compiled template file from cache directory.
- getEvaluatedContent() : string
- Evaluates a template file after compiling it in a temporary file and returns the result after evaluation.
- isDebug() : bool
- Get the value of `static::$debug`.
- render() : void
- Renders a template file and pass the passed variables to it.
- setDebug() : $this
- Set the value of `static::$debug`
- extractBlocks() : string
- Extract blocks data from template code.
- importDependencies() : string
- Imports template dependencies.
- importIncludes() : string
- Imports template includes.
- injectBlocks() : string
- Injects blocks data in template code.
- parseBlock() : string
- Parses a template block, extract data from it, and updates class internal state.
- printVariables() : string
- Echos escaped and unescaped variables in template code.
- require() : void
- Requires a PHP file and pass it the passed variables.
- resolveCachePath() : string
- Resolves a template file path from cache directory.
- resolvePath() : string
- Resolves a template file path.
- wrapComments() : string
- Wraps comments in template code.
- wrapControlStructures() : string
- Wraps control structures and PHP code in template code.
- wrapPhp() : string
- Wraps PHP in template code.
- assertFileExists() : void
- Asserts that a file exists.
- createCacheDirectory() : void
- Creates cache directory if it does not exist.
Constants
REGEX
Regular expressions for syntax tokens.
public
mixed
REGEX
= ['dependency' => '/{!\s*@(extends|embed)\s+['"]?(.*?)['"]?\s*!}/s', 'include' => '/{!\s*@include\s+['"]?(.*?)['"]?\s*!}/s', 'block' => '/{!\s*@block\s+(.*?)\s*!}(.*?){!\s*@endblock\s*!}(?!.+{!\s*@endblock\s*!})/s', 'block.child' => '/{!\s*@block\s+.*?\s*!}.*({!\s*@block\s+(.*?)\s*!}(.*?){!\s*@endblock\s*!}).*{!\s*@endblock\s*!}/s', 'block.print' => '/{!\s*@block\((.*?)\)\s*!}/s', 'block.super' => '/{!\s*@super\s*!}/s', 'php' => '/{!\s*(.+?)\s*!}/s', 'comment' => '/{#\s*(.+?)\s*#}/s', 'controlStructure' => '/@(if|else|elseif|endif|do|while|endwhile|for|endfor|foreach|endforeach|continue|switch|endswitch|break|return|require|include)/s', 'controlStructure.start' => '/^@(if|else|elseif|while|for|foreach|switch)/s', 'controlStructure.end' => '/@(endif|endwhile|endfor|endforeach|endswitch)$/s', 'print' => '/{{\s*(.+?)\s*}}/s', 'print.unescaped' => '/{{{\s*(.+?)\s*}}}/s']
Properties
$debug
Whether or not to add debugging info to the compiled template.
public
static bool
$debug
= false
$cache
Whether or not to cache compiled template files.
protected
bool
$cache
$cacheDirectory
Template files cache directory.
protected
string
$cacheDirectory
$templatesDirectory
Template files directory.
protected
string
$templatesDirectory
$templatesFileExtension
Template files file extension.
protected
string
$templatesFileExtension
$blocks
Currently captured template blocks.
private
array<string|int, mixed>
$blocks
= []
Methods
__construct()
Class constructor.
public
__construct([string $templatesDirectory = './templates' ][, string $templatesFileExtension = '.phtml' ][, string $cacheDirectory = './cache/' ][, bool $cache = true ][, bool $debug = false ]) : mixed
Parameters
- $templatesDirectory : string = './templates'
- $templatesFileExtension : string = '.phtml'
- $cacheDirectory : string = './cache/'
- $cache : bool = true
- $debug : bool = false
Return values
mixed —clearCache()
public
clearCache() : void
Return values
void —getCompiledContent()
Compiles a template file and returns the result after compilation.
public
getCompiledContent(string $file) : string
Parameters
- $file : string
-
A relative path to template file from templates directory.
Tags
Return values
string —getCompiledFile()
Compiles a template file and returns the path to the compiled template file from cache directory.
public
getCompiledFile(string $file) : string
Parameters
- $file : string
-
A relative path to template file from templates directory.
Tags
Return values
string —getEvaluatedContent()
Evaluates a template file after compiling it in a temporary file and returns the result after evaluation.
public
getEvaluatedContent(string $file[, array<string|int, mixed> $variables = [] ]) : string
Parameters
- $file : string
-
A relative path to template file from templates directory.
- $variables : array<string|int, mixed> = []
-
The variables to pass to the template.
Tags
Return values
string —isDebug()
Get the value of `static::$debug`.
public
isDebug() : bool
Return values
bool —render()
Renders a template file and pass the passed variables to it.
public
render(string $file[, array<string|int, mixed> $variables = [] ]) : void
Parameters
- $file : string
-
A relative path to template file from templates directory.
- $variables : array<string|int, mixed> = []
-
The variables to pass to the template.
Return values
void —setDebug()
Set the value of `static::$debug`
public
setDebug(bool $debug) : $this
Parameters
- $debug : bool
Return values
$this —extractBlocks()
Extract blocks data from template code.
protected
final extractBlocks(string $code) : string
Parameters
- $code : string
Return values
string —importDependencies()
Imports template dependencies.
protected
final importDependencies(string $file) : string
Parameters
- $file : string
-
The template file.
Tags
Return values
string —importIncludes()
Imports template includes.
protected
final importIncludes(string $code) : string
Parameters
- $code : string
-
The template code.
Return values
string —injectBlocks()
Injects blocks data in template code.
protected
final injectBlocks(string $code) : string
Parameters
- $code : string
Return values
string —parseBlock()
Parses a template block, extract data from it, and updates class internal state.
protected
final parseBlock(string $code) : string
Parameters
- $code : string
-
The template block.
Return values
string —printVariables()
Echos escaped and unescaped variables in template code.
protected
final printVariables(string $code) : string
Parameters
- $code : string
Return values
string —require()
Requires a PHP file and pass it the passed variables.
protected
static require(string $file[, array<string|int, mixed>|null $variables = null ]) : void
Parameters
- $file : string
-
An absolute path to the file that should be compiled.
- $variables : array<string|int, mixed>|null = null
-
[optional] An associative array of the variables to pass.
Return values
void —resolveCachePath()
Resolves a template file path from cache directory.
protected
resolveCachePath(string $file) : string
Parameters
- $file : string
-
The file path to resolve.
Return values
string —resolvePath()
Resolves a template file path.
protected
resolvePath(string $file) : string
Parameters
- $file : string
-
The file path to resolve.
Return values
string —wrapComments()
Wraps comments in template code.
protected
final wrapComments(string $code) : string
Parameters
- $code : string
Return values
string —wrapControlStructures()
Wraps control structures and PHP code in template code.
protected
final wrapControlStructures(string $code) : string
Parameters
- $code : string
Return values
string —wrapPhp()
Wraps PHP in template code.
protected
final wrapPhp(string $code) : string
Parameters
- $code : string
Return values
string —assertFileExists()
Asserts that a file exists.
private
assertFileExists(string $file) : void
Parameters
- $file : string
-
An absolute path to a file.
Tags
Return values
void —createCacheDirectory()
Creates cache directory if it does not exist.
private
createCacheDirectory() : void