Artikel
von Patrick Froch
Dies Mal soll es um die Templateengine von Symfony2 gehen. Wie der eine oder andere weiß, nutzt Symfony als Templateengine Twig. Da Twig ein sehr mächtiges Werkzeug ist, kann es natürlich nicht in einem kleinen Artikel besprochen werden. Hier wird es erst einmal eine Einführung geben, in weiteren Artikel werde ich auf Besonderheiten eingehen. Diese Artikel werde ich immer dann schreiben, wenn mir etwas auffällt. Nun aber zu den Grundlagen.

Twig

Ich werde hier nicht auf die allgemeinen Vorteile einer Templateengine eingehen. Es gibt durch aus unterschiedliche Meinungen zu den Vor- und Nachteilen von Templateengines. Ich finde sie nützlich, da sie meiner Meinung nach die Templates übersichtlicher machen. Bei Twig gibt es drie Typen von Auszeichnungen:
  • {{ ... }} Gibt etwas aus
  • {% ... %} Tut etwas
  • {# this is a comment #} Ist ein Kommentar

Basis

Als Basis der Betrachtung von Twig soll folgenden Template diehnen: In Zeile 6 wird ein Block mit einem Standardwert definiert, in diesem Fall der Seitentitel. Er kann später in anderen Templates überschrieben werden, ich werden weiter unten noch darauf eingehen. In Zeile 19 wird ein leerer Block definiert (body), der von anderen Templates mit dem eigentlichen Inhalt der Seite gefüllt wird.

Erweitern eines Tamplates

Will man nun in einem weiteren Template den Bock body füllen, wird einfach das Basis-Template erweitert. Dies könnte z.B. so aussehen: In Zeile 2 wird das zu erweiternden Template angegeben. In Zeile 4 wird der Titel aus dem Basis-Template überschrieben. Der Block body wird ab Zeile 7 mit einer for-Schleife mit Inhalt gefüllt. Da das Basis-Template unter app/Resources/views directory/ gespeichert ist, kann hier der Namespace weggelassen werden. Der Name wird deshalb mit ::base.html.twig angegeben. Wie man an dem Title-Block sieht, kann man nicht nur leere Blöcke mit Inhalt füllen, sondern auch bereits vorhandenen Inhalt überschreiben. So ist es besonders einfach Vorgabewerte zu definieren und bei Bedarf zu ändern.

Best Practies

Es gibt einige Dinge, die das Leben mit Twig einfacher machen können:
  • Wenn {% extends %} benutzt wird, muss es die ersten Anweisung im Template sein.
  • Es sollte so viele Blöcke wie möglich im Basis-Template definiert und mit sinnvollen Vorgabewerten belegt werden. Die untergeordneten Templates müssen so nur die veränderten Teile der Seite austauschen.
  • Wenn ein Block in mehreren Templates definiert werden muss, ist dies ein Zeichen dafür, dass er in ein , übergeordnetes Template ausgelagert werden sollte.
  • Wenn man den Inhalt eines Blocks aus einem übergeordneten Template benötigt, kann man ihn mit der
    {{ parent() }}-Funktion bekommen (Zeile 6):

Zurück

Kommentare

Aufgrund der unklaren Rechtslage durch die DSGV habe ich mich entschlossen, die Kommentare bis auf Weiteres zu deaktivieren.