← Code-Übersicht

TemplateRenderer.php

Pfad: src/Infrastructure/Http/TemplateRenderer.php

Ext: php

Größe: 1155 Bytes

Geändert: 2026-07-15 21:49:04+02

<?php
declare(strict_types=1);

namespace Demo\Infrastructure\Http;

/**
 * Rendert native PHP-Templates in einen String. Stellt jedem Template den
 * Escaper $e und das Template-Verzeichnis $_dir bereit.
 */
final class TemplateRenderer
{
    /** @var string Basisverzeichnis der Templates. */
    private string $verzeichnis;

    /**
     * @param string $verzeichnis Absolutes Template-Verzeichnis.
     */
    public function __construct(string $verzeichnis)
    {
        $this->verzeichnis = rtrim($verzeichnis, '/');
    }

    /**
     * Rendert ein Template mit Daten.
     *
     * @param string              $template Dateiname ohne .php.
     * @param array<string,mixed> $daten    Template-Variablen.
     * @return string Gerendertes Markup.
     */
    public function render(string $template, array $daten = []): string
    {
        $daten['_dir'] = $this->verzeichnis;
        $daten['e'] = static fn (string $v): string => htmlspecialchars($v, ENT_QUOTES, 'UTF-8');
        extract($daten, EXTR_SKIP);

        ob_start();
        require $this->verzeichnis . '/' . $template . '.php';

        return (string) ob_get_clean();
    }
}