Search by

joke-php / templator

Voral

Templator for Joke micro-framework

Package info

github.com/joke-php/templator

pkg:composer/joke-php/templator

Statistics

Installs: 5

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

2.0.0 2026-09-03 15:50 UTC

This package is auto-updated.

Last update: 2026-09-10 04:58:21 UTC


README

Шаблонизатор для микрофреймворка Joke.

Шаблоны компилируются в PHP-код и кэшируются на файловой системе; синтаксис ограничен небольшим набором директив, что делает пакет пригодным для учебных и небольших проектов. Набор директив и обработчиков узлов расширяется без правки ядра, а подключение сводится к регистрации одного сервис провайдера

Scrutinizer Code Quality Code Coverage PHP Tests

Требования

  • 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.