🦖
[■] codesaur/template 1=[↕]
codesaur/template · v5.0.1

Template

Self-contained PHP template engine - autoescape, filters, functions, macros, expression parser

Packagist version Downloads PHP version License Aikido Intel 98/100
1:1 ══ composer require codesaur/template
[■] Template

A minimal PHP template engine whose syntax and design were inspired by Twig during its evolution. It supports everything from simple text placeholders to powerful templates with if / for / macro / filter syntax. Since 5.0 every {{ }} is HTML-escaped by default (autoescape), so XSS protection no longer depends on remembering |e - real HTML is printed with the |raw filter or a Markup object. No external dependencies.

Features
  • Autoescape - every {{ }} is HTML-escaped by default (like Twig)
  • The |raw filter and Markup objects mark real HTML as safe
  • setAutoEscape(false) for plain-text templates such as e-mail subjects
  • if / elseif / else, for / else, set, macro constructs
  • Expression parser: ?:, ??, ~, in, not in, starts with, ends with, matches, ternary
  • 30+ built-in filters: e, raw, date, length, slice, json_encode, merge, replace, number_format ...
  • addFilter() / addFunction() - register your own filters and functions
  • Object method calls: {{ user.can("perm") }}
  • range(), max(), min(), attribute() functions
  • MemoryTemplate (string source) and FileTemplate (file source)

Core classes

ClassPurpose
MemoryTemplateFull template engine (if, for, filter, function, macro, expression parser, autoescape)
FileTemplateFile-based template loader (extends MemoryTemplate)
MarkupStringable wrapper marking an HTML string as safe - never escaped

Quick example

use codesaur\Template\MemoryTemplate;
use codesaur\Template\FileTemplate;
use codesaur\Template\Markup;

// Бүрэн engine - if, for, filter, function бүгд дэмжинэ
$page = new MemoryTemplate(
    '{% for item in items %}<li>{{ item|upper }}</li>{% endfor %}',
    ['items' => ['a', 'b', 'c']]
);
echo $page;

// Autoescape: {{ }} бүр HTML escape хийгдэнэ, HTML хэвлэхэд |raw
$page = new MemoryTemplate(
    '<h1>{{ title }}</h1>{{ body|raw }}',
    ['title' => '<script>alert(1)</script>', 'body' => '<p>Итгэмжлэгдсэн HTML</p>']
);
echo $page; // <h1>&lt;script&gt;alert(1)&lt;/script&gt;</h1><p>Итгэмжлэгдсэн HTML</p>

// PHP талаас HTML өгөх бол Markup, энгийн текст темплейт бол autoescape-ийг унтраана
$page->set('body', new Markup('<b>HTML</b>'));
$subject = new MemoryTemplate('{{ name }} - захиалга', ['name' => 'Tom & Jerry']);
$subject->setAutoEscape(false); // и-мэйлийн гарчиг: & нь &amp; болох ёсгүй

// Файл суурьтай template
$page = new FileTemplate('page.html', [
    'title' => 'Hello',
    'items' => ['a', 'b', 'c']
]);
$page->addFunction('link', fn($route) => "/app/$route");
echo $page;

Running tests

composer test
[■] Info
Install
composer require codesaur/template
Requirements
  • PHP 8.2.1+
  • ext-json
  • ext-mbstring
  • Composer
Aikido score 98/100
Checked: 2026-09-10
Links