[■]
codesaur/template
1=[↕]
1:1 ══ composer require codesaur/template
codesaur/template · v5.0.1
Template
Бие даасан PHP template engine - autoescape, filters, functions, macros, expression parser
[■]
Template
Хөгжлийн явцад Twig template engine-ийн синтакс, дизайн загвараас санаа авч чадамжуудаа өргөжүүлсэн минимал PHP template engine. Энгийн текст-суурьтай темплейтээс эхлээд if / for / macro / filter бүхий хүчирхэг темплейт хүртэл дэмждэг. 5.0 хувилбараас эхлэн {{ }} бүр анхнаасаа HTML escape хийгддэг (autoescape) тул XSS-ээс хамгаалалттай - жинхэнэ HTML хэвлэхэд |raw шүүлтүүр эсвэл Markup объект ашиглана. Гадны хамааралгүй, нэг файлаас ажиллана.
Онцлогууд
- Autoescape - {{ }} бүр анхнаасаа HTML escape хийгдэнэ (Twig шиг)
- |raw шүүлтүүр ба Markup объект - жинхэнэ HTML-ээ аюулгүй гэж тэмдэглэх
- setAutoEscape(false) - и-мэйлийн гарчиг мэтийн энгийн текст темплейтэд
- if / elseif / else, for / else, set, macro бүтцүүд
- Expression parser: ?:, ??, ~, in, not in, starts with, ends with, matches, ternary
- 30+ бэлэн filter: e, raw, date, length, slice, json_encode, merge, replace, number_format ...
- addFilter() / addFunction() - өөрийн filter, function бүртгэх
- Объектын public метод дуудах: {{ user.can("perm") }}
- range(), max(), min(), attribute() функцүүд
- MemoryTemplate (string) ба FileTemplate (файл) хоёр хэлбэр
Үндсэн классууд
| Класс | Үүрэг |
|---|---|
MemoryTemplate | Бүрэн template engine (if, for, filter, function, macro, expression parser, autoescape) |
FileTemplate | Файлын системээс template уншиж рэндэрлэх (MemoryTemplate-ийг өргөтгөнө) |
Markup | HTML тэмдэгт мөрийг "аюулгүй" гэж тэмдэглэх Stringable wrapper - escape хийгдэхгүй |
Жишээ код
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;
Тест ажиллуулах
composer test
[■]
Info
Суулгах
composer require codesaur/template
Шаардлага
- PHP 8.2.1+
- ext-json
- ext-mbstring
- Composer
Баримт бичиг