joke-php / templator
Templator for Joke micro-framework
Requires
- php: ^8.5
- voral/joke: ^1.5
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.95
- php-mock/php-mock-phpunit: ^2.14
- phpstan/phpstan: ^2.1
- phpstan/phpstan-phpunit: ^2.0
- phpunit/phpunit: ^13.1
- voral/version-increment: ^3.2
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-10 04:58:21 UTC
README
Шаблонизатор для микрофреймворка Joke.
Шаблоны компилируются в PHP-код и кэшируются на файловой системе; синтаксис ограничен небольшим набором директив, что делает пакет пригодным для учебных и небольших проектов. Набор директив и обработчиков узлов расширяется без правки ядра, а подключение сводится к регистрации одного сервис провайдера
Требования
- PHP 8.5 или выше
voral/joke^1.5
Установка
composer require joke-php/templator
Регистрация провайдера в bootstrap/kernel.php:
use Vasoft\Joke\Templator\TemplatorProvider; return new KernelConfig() ->addProvider(TemplatorProvider::class);
Быстрый старт
Обработчик маршрута в routes/web.php. ServiceContainer и TemplateEngine подставляются контейнером по типам
параметров:
use Vasoft\Joke\Container\ServiceContainer; use Vasoft\Joke\Templator\TemplatedResponse; use Vasoft\Joke\Templator\TemplateEngine; $router->get( '/', static function (ServiceContainer $container, TemplateEngine $engine) { $response = new TemplatedResponse($container, $engine); return $response->show('pages/index.php', ['name' => 'alex'], 0); }, );
Шаблон pages/index.php:
<h1>Привет, {{ name }}!</h1>
Третий аргумент show() — TTL кэша в секундах; 0 отключает кэширование на время разработки.
Основные возможности
-
Вывод переменных.
{{ }}экранирует HTML,{% raw %}выводит значение как есть. Вложенные данные доступны через точку:{{ user.profile.name }} {% raw description %} -
Условия.
{% if user.admin %}Администратор{% else %}Гость{% endif %} -
Циклы. Поддерживается перебор значений и пар «ключ — значение»:
{% foreach item in items %}<li>{{ item.name }}</li>{% endforeach %} {% foreach key, value in map %}{{ key }}: {{ value }}{% endforeach %} -
Наследование шаблонов. Содержимое страницы оборачивается в каркас из
templates/{тема}/layouts/, при отсутствии файла в активной теме используетсяdefault:{% layout main %} <p>Содержимое страницы</p> {% endlayout %} -
Компоненты. Классы на базе
BaseComponentс собственным шаблоном и жизненным цикломexecute → beforeRender → render; регистрируются вComponentCollection:{% component vasoft:day %} -
Подключение ресурсов, CSRF и отложенный вывод. Директивы связаны с
PageBuilder,CsrfMiddlewareиDeferServiceфреймворка:{% include css /assets/style.css head %} {% csrf %} <title>{% defer page.title %}</title> -
Собственные директивы. Обработчик реализует
NodeHandlerInterface(compile()иrender()) и регистрируется в конфигурации:$config->directiveCollection->upsert(StatementToken::class, 'custom', '/custom'); $config->addDirectiveHandler('custom', CustomHandler::class);
-
Кэширование. Скомпилированные шаблоны хранятся в
{cache}/templator/и пересобираются при изменении исходного файла или истечении TTL.
Документация
Полная документация доступна в каталоге doc/.
Лицензия
MIT. См. LICENSE.md.