Twig Templates mit Slim PHP

1310_slim_twig_ordnerstruktur.thumb

Ein entscheidendes Feature von Slim PHP ist neben seinem sehr mächtigen Router die Verwendung von Template Engines durch custom Views. Um Twig nun mit Slim zu verwenden sind ein paar recht einfache Schritte notwendig und auch ein paar Fallstricke, welche es zu beachten gilt.

Die notwendigen Komponenten für unser Beispiel sind Slim, Twig und Slim/views. Da wir hier von abhängigen Komponenten sprechen, verwenden wir hierfür natürlich den genialen Dependency Manager for PHP: Composer. Das Haupt-Repository für Composer findet man unter https://packagist.org/ und dort die notwendigen Pakete. Man erzeugt im noch leeren Projekt-Verzeichnis das config-File composer.json

{
    "require": {
        "slim/slim": "dev-master",
        "slim/views": "dev-master",
        "twig/twig": "1.14.*@dev"
    }
}

Nun öffnet man eine Console im selben Ordner und mit dem Befehl: composer install wird Slim PHP mit Twig schon installiert und über den Autoloader miteinander verknüpft.

Im Projektordner befindet sich nun der vendor-Ordner,  welcher vom Composer angelegt wurde, und die composer.json. An dieser Stelle zeigt sich die Flexibilität von Slim, denn Speicherort von index.php oder dem Rest der Anwendung liegt nun völlig in der Hand des Entwicklers.

Projektstruktur

Ich verwende gern einen Unterordner als public-Root, sprich das Verzeichnis, auf das dann der URL des Servers zeigt und welches dann die index.php beeinhaltet. Somit ist der Rest der Anwendung nicht direkt öffentlich zugänglich. Auf selber Ebene einen apps-Ordner in dem Model, View und Controller Platz finden.

Nun konfigurieren wir Slim und Twig in der index.php. Als erstes der Verweis auf die ../vendor/autoload.php und weiter das Anlegen eines Custom Views sowie festlegen des Template-Pfads und Aufrufen eines Twig-Templates.

<?php
require '../vendor/autoload.php';

$app = new SlimSlim(array(
	'view' => new SlimViewsTwig(),
	'templates.path' => '../app/views'
));

$view = $app->view();
$view->parserOptions = array(
    'debug' => true,
    'cache' => dirname(__FILE__) . '/cache'
);

$view->parserExtensions = array(
    new SlimViewsTwigExtension(),
);

$app->get('/', function() use ($app) {
	$app->render('index.twig.html',['hello' => 'hello world']);
})->name('index');

$app->run();

Die Templates bzw. die Views der Anwendung landen im Ordner: app/views und ich kennzeichne sie zur besseren Übersicht mit der Endung twig.html. Das tolle an Twig ist die saubere Syntax mit der der Quelltext lesbarer bleibt, als mit ständigen PHP-Statements für die Ausgabe von Daten, Schleifen oder Funktionen. Hier ein Beispiel für den Aufruf:

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Hello</title>
</head>
<body>
	<h1>{{ hello }}</h1>
	<p>the base URL is {{ baseUrl() }}</p>
</body>
</html>

Das Paket slim/views bringt noch drei nützliche Helfer in Form der Funktionen urlfor(), baseUrl() und siteUrl(). Welche das Routing innerhalb der Anwendung extrem vereinfachen.

Slim PHP ist ein sehr mächtiges unter den Microframeworks, welches durchaus RESTful arbeiten und dank Composer mit allerlei nützlichen Zusätzen aufgebohrt werden kann. Aber bei aller Euphorie, Slim bietet kein MVC und ist damit aus meiner Sicht für große Projekte eher ungeeignet. Das ist aber auch nicht das Ziel der Microframeworks und so finden Sie überall dort ihr Einsatzgebiet, wo ein ausgewachsenes Framework wie z.B. das Zend Framework, Laravel oder gar ein CMS alá WordPress, Joomla (btw. ich hasse es immer noch) oder Typo3 sprichwörtlich mit Kanonen auf Spatzen geschossen wäre.

Ein Gedanke zu „Twig Templates mit Slim PHP“

  1. Sehr cooler Artikel! Hat mir auf jeden Fall dabei geholfen, ein kleines Projekt mit Twig und Slim aufzusetzen.

    Vielen Dank

Schreibe einen Kommentar

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