Native PHP Funktionen in Twig Templates zur Verfügung stellen, so gehts

Die Template Engine Twig von Sensio Labs bringt von Haus zwar einige Filter, Funktionen, Tags und Tests mit, jedoch ist es nicht möglich auf bereits vorhandene PHP Funktionen zuzugreifen. Dadurch ist Twig natürlich ziemlich eingeschränkt.

Klar, man kann jetzt für jeden weiteren Filter einen neuen separaten Twig-Filter hinzufügen. Gleiches kann man natürlich machen, wenn man in Twig neue Funktionen zur Verfügung stellen möchte. Spätestens bei Filter / Funktion „X“ fängt das aber an zu nerven, zumal man fast nur „copy & paste“ macht und den Quelltext unnötig aufbläht.

Zum Glück hat Twig hier über die Methoden registerUndefinedFilterCallback() und registerUndefinedFunctionCallback() einen Ausweg vorbereitet. Diese beiden Methoden (Funktionen) nutze ich, um einfach alle PHP Funktionen im Twig Template via Filter und Funktion zur Verfügung zu stellen.

Hinweis: Ihr müsst für Euch natürlich selbst entscheiden, ob Euch das zu „unsicher“ ist, weil dann ggf. auch Template-Entwickler über die Freigabe der nativen PHP Funktionen mehr Zugriff auf das Gesamtsystem haben. Ich sehe da persönlich kein Problem, ich wollte den Punkt jedoch nicht unerwähnt lassen.


Hier zunächst die minimale Erweiterung (einfach im PHP Skript nach dem Instanziieren des Twig Objekts eingefügten):

// minimal example of getting twig environment when using it with slim framework
$app = new \Slim\Slim();
$view = $app->view(new \Slim\Views\Twig());
$twig = $view->getEnvironment();

// hack: make php functions available to twig as filter or function
$twig->registerUndefinedFilterCallback(function($name) {
    if (function_exists($name)) {
        return new Twig_SimpleFilter($name, function() use($name) {
            return call_user_func_array($name, func_get_args());
        });
    }
    return false;
});
$twig->registerUndefinedFunctionCallback(function($name) {
    if (function_exists($name)) {
        return new Twig_SimpleFunction($name, function() use($name) {
            return call_user_func_array($name, func_get_args());
        });
    }
    return false;
});

Dieses Beispiel nutzt Twig in Verbindung mit dem Slim Framework. Wenn Ihr Twig in einem anderen Framework eingebunden haben solltet, dann sehen die Zeilen 2-4 sicherlich anders aus (es ging hier nur ums Prinzig, wie man Twig via Slim einbindet und auch wieder an das Twig Objekt kommt).


Und so könnt Ihr ab sofort alle PHP Funktionen nutzen, als Filter:

{{ "hallo"|ucfirst }}

… oder als Funktion:

{{ ucfirst("hallo") }}

Das könnte dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte beachte die Hinweise zum Datenschutz