Anzeige
Anzeige
UX & Design

PHP-Mikro-Framework Silex: Unter dem Mikroskop

Gleichermaßen bekannt wie gefürchtet sind kleine Skripte, die „mal eben so“ geschrieben wurden. Jedes dieser Skripte ist entsprechend einzigartig, folgt anderen Konventionen und implementiert Grundlegendes immer wieder aufs Neue. Hoher Wartungsaufwand und Probleme sind die Folge. Das PHP-Mikro-Framework Silex versucht genau dies zu ändern.

3 Min.
Artikel merken
Anzeige
Anzeige

Silex [1] ist ein Mikro-Framwork für PHP ab Version 5.3 und stammt von den Symfony2-Machern. Es greift Konzepte des Ruby-Mikro-Frameworks Sinatra [2] auf und basiert auf den Kern-Komponenten von Symfony2 [3] sowie dem Dependency-Injection-Container Pimple [4].

Anzeige
Anzeige

Es bietet damit genau jene Grundlagen, die nötig sind, um einfache Anwendungen innerhalb einer Datei zu schreiben. Um das zu erreichen, setzt Silex auf Knappheit, Erweiterbarkeit und Testbarkeit: Knappheit im Sinne einer klar begrenzten API, die statt Overhead vor allem Schlankheit demonstrieren soll. Durch den Einsatz des Mikro-Service-Containers Pimple lässt sich Silex zudem leicht um andere Bibliotheken erweitern. Zu guter Letzt sind dank der Verwendung der Symfony2-HttpKernel-Komponente Requests und Responses abstrahiert, was Tests erleichert.

Einstieg

Wie von einem Mikro-Framework nicht anders zu erwarten, ist auch für die Verwendung von Silex sehr wenig Aufwand zur Einrichtung notwendig. So konfiguriert man Controller und Actions sowie die Zuordnung zu den Routen auf einen Streich:

Anzeige
Anzeige
Erste Schritte mit Silex
require_once __DIR__ . '/silex.phar';
$app = new Silex\Application();
$app->get('/hello/{name}', function($name) use($app) {
 return 'Hello ' . $app->escape($name);
});
$app->run();

Listing 1

Dabei wird zunächst das Framework selbst eingebunden („silex.phar“), ein PHP-Archiv, das sämtliche Funktionen enthält. Die anschließend erstellte Instanz einer Anwendung erhält eine GET-Route für „/hello/{name}“. Ein Aufruf der entsprechenden URL führt die anonyme Funktion aus und gibt den Rückgabewert an den Browser zurück. Die letzte Zeile führt die Anwendung aus.

Anzeige
Anzeige

Eine .htaccess-Datei im gleichen Verzeichnis sorgt für die URL-Umschreibung, um jeweils die gleiche Datei („index.php“) zu erreichen. Das Ergebnis lässt sich schließlich unter „/hello/world“ anschauen.

Silex in .htaccess konfigurieren
<IfModule mod_rewrite.c>
 Options -MultiViews
 RewriteEngine On
 #RewriteBase /path/to/app
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteRule ^ index.php [L]
</IfModule>

Listing 2

Templates mit Twig

Bei umfangreicheren Ausgaben, zum Beispiel (X)HTML-formatiertem Inhalt, wird das Ganze schnell unübersichtlich und schlecht wartbar. Um das zu verhindern, muss die Ausgabe ausgelagert werden. Da Silex erweiterbar ist, unterstützt es hierfür die Twig-Template-Engine [5], die auch in Symfony2 zum Einsatz kommt.

Anzeige
Anzeige

Nötig ist dafür zunächst die aktuelle Twig-Version [6]. Um die Bibliothek in Silex zu integrieren, muss der komplette lib-Ordner nach vendor/twig kopiert und im Hauptverzeichnis ein Ordner namens „views“ angelegt werden. Daraufhin lässt sich der Twig-Service-Provider registrieren und direkt verwenden.

Erweiterungen registrieren
$app->register(new Silex\Provider\TwigServiceProvider(), array(
 'twig.path' => __DIR__ . '/views',
 'twig.class_path' => __DIR__ . '/vendor/twig/lib'
));

Listing 3

Templates landen fortan im views-Ordner und lassen sich über die Render-Methode ausgeben. Ersetzt werden Variablen übrigens nach dem Muster „{{ name }}“. Weitere Details zu Platzhaltern und anderen Möglichkeiten finden sich in der Twig-Dokumentation.

Templates mit Twig ansprechen
$app->get('/hello/{name}', function ($name) use ($app) {
 return $app ['twig']->render('hello.twig', array(
 'name' => $name
 ));
});

Listing 4

Fehlersuche

Um mehr als nur lästige weiße Seiten bei Fehlern zu erhalten, lässt sich Silex in einen Debug-Modus versetzen. Dieser zeigt aktuelle Fehler samt Stack-Trace direkt im Browser an.

Anzeige
Anzeige
Aktive Fehlersuche
$app ['debug'] = true;

Listing 5

Bleibt zu Beginn dennoch eine weiße Seite (oder entstehen ominöse Parsing-Fehler), liegt das häufig an Suhosin [7] oder dem Ioncube-Loader [8]. Während Letzterer ein Problem mit PHAR-Dateien hat und sich nur mit einem Upgrade auf eine Version ab 4.0.9 umstimmen lässt, benötigt Suhosin lediglich die Anweisung, PHAR-Dateien gutzuheißen.

Silex-Starthilfe für Suhosin
suhosin.executor.include.whitelist = phar

Listing 6

Fazit

Die Verwendung von Twig ist nur ein Beispiel für eine funktionale Erweiterung. Silex selbst ist schlank und konzentriert sich auf Kern-Anwendungen. Hinsichtlich der Erweiterungen verfolgt es vielmehr das Prinzip „best tool for the job“, anstatt alles selbst lösen zu wollen. Andere Beispiele für Erweiterungen sind demnach etwa Doctrine [9] für die Datenbank-Abstraktion, Monolog [10] für das Logging und Swiftmailer [11] für den Mailversand.

Aufgrund des geringen Setup-Aufwands bietet Silex eine gute Grundlage für Kleinstprojekte. Durch die umfangreiche Dokumentation und den sauberen Code ist Silex bei soliden OOP-Kenntnissen sehr leicht zu erlernen. Der Code wird einheitlicher und die Wartung und Weiterentwicklung dadurch einfacher.

Anzeige
Anzeige

Wächst eine ursprünglich kleine Anwendung, so lassen sich bei einem Umstieg auf vollständige Symfony2-Komponenten weite Teile des Codes wiederverwenden. Entsprechend ist Silex nicht nur eine wertvolle Unterstützung bei „mal eben so“ geschriebenen Skripten, sondern kann auch für testhalber umgesetzte Teile eines großen Projekts dienen.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Schreib den ersten Kommentar!
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige