setono/php-templates

An extremely simple, yet wonderful, php template system

v1.2.0 2022-09-21 13:36 UTC

This package is auto-updated.

Last update: 2024-11-15 07:11:10 UTC


README

Latest Version Latest Unstable Version Software License Build Status Coverage Status Quality Score

In the PHP world we have wonderful template engines/systems like Twig and Plates. If you need features like inheritance, extensions, built-in helpers etc. you should go with one of those.

On the other hand, if you just want to be able to create a PHP template like this:

<h1>Hello <?=$name?></h1>
<p>Today's date is <?=$date->format('d.m.Y')?></p>

Then this library is for you.

Installation

$ composer require setono/php-templates

Usage

In this example I assume your templates are here: templates/php and you have a template like this:

<!-- templates/php/App/hello.php -->
<h1>Hello <?=$name?></h1>

The path of this template is divided into three parts: templates/php is the path added to the engine. App is the namespace. hello is the template name.

Keep this in mind when looking at the rendering of this template:

<?php
// render.php

use Setono\PhpTemplates\Engine\Engine;

$engine = new Engine();
$engine->addPath('templates/php');

echo $engine->render('@App/hello', [
    'name' => 'John Doe',
]);

This will output:

<h1>Hello John Doe</h1>

Override templates

If you want to override templates, it is very straight forward. Let's set up the engine first:

<?php
// override.php

use Setono\PhpTemplates\Engine\Engine;

$engine = new Engine();
$engine->addPath('vendor/namespace/src/templates/php'); // The path is added with a default priority of 0
$engine->addPath('templates/php', 10); // Here we set the priority higher than the vendor added path

Here is the template we want to override:

<!-- vendor/namespace/src/templates/php/ThirdPartyNamespace/hello.php -->
<h1>Hi <?=$name?>! This template is not rendered, since it is overridden</h1>

And here is the template that will override the previous one:

<!-- templates/php/ThirdPartyNamespace/hello.php -->
<h1>Hi <?=$name?>! This template is rendered, yeah!</h1>

Notice that we override templates by adding a directory with the same name as the original directory. In this case: ThirdPartyNamespace.

<?php
echo $engine->render('@ThirdPartyNamespace/hello', [
    'name' => 'John Doe',
]);

This will output:

<h1>Hi John Doe! This template is rendered, yeah!</h1>