An API to render templates with a variety of template engines.
composer require icanboogie/render
Templates may be rendered with a variety of template engines.
The following example demonstrates how to create an engine provider with the builtin engine for PHP templates.
<?php
/* @var ICanBoogie\Render\PHPEngine $engine */
/* @var string $template_pathname */
/* @var mixed $content */
/* @var array<string, mixed> $variables */
$rendered = $engine->render($template_pathname, $content, $variables);
Note: Currently, the package only provides an engine to render PHP templates, the available engine can be extended with third parties packages such as render-engine-markdown or render-engine-patron.
Render engines are obtained through engine providers. The following providers are builtin:
- EngineProvider\Container: Provides engines from a PSR container.
- EngineProvider\Immutable: Provides engines from an immutable collection.
- EngineProvider\Mutable: Provides engines from a mutable collection.
The following examples demonstrates how to obtain an engine for a .php
extension from an immutable
provider.
<?php
use ICanBoogie\Render\EngineProvider\Immutable;
use ICanBoogie\Render\PHPEngine;
$engines = new Immutable([ '.php' => new PHPEngine() ]);
echo $engines->engine_for_extension('.php')::class; // ICanBoogie\Render\PHPEngine
All engine providers are traversable, this feature can be used to collect the supported extensions:
<?php
/* @var EngineProvider $engines */
$extensions = array_keys(iterator_to_array($engines));
echo implode(', ', $extensions); // .php
Engines should use the Engine::VAR_TEMPLATE_PATHNAME
variable to define the pathname of the
template being rendered, so that it is easy to track which template is being rendered and from
which location.
A template resolver tries to match a template name with an actual template file. A set of paths can be defined for the resolver to search in.
A Renderer instance is used to render a template with a subject and options. An engine collection and a template resolver are used to find suitable templates for the rendering.
The project is continuously tested by GitHub actions.
This project adheres to a Contributor Code of Conduct. By participating in this project and its community, you're expected to uphold this code.
See CONTRIBUTING for details.