[■]
codesaur/template
1=[↕]
1:1 ══ composer require codesaur/template
codesaur/template · v5.0.1
Template
Self-contained PHP template engine - autoescape, filters, functions, macros, expression parser
[■]
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
| Class | Purpose |
|---|---|
MemoryTemplate | Full template engine (if, for, filter, function, macro, expression parser, autoescape) |
FileTemplate | File-based template loader (extends MemoryTemplate) |
Markup | Stringable 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><script>alert(1)</script></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); // и-мэйлийн гарчиг: & нь & болох ёсгүй
// Файл суурьтай 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
Documentation