# Twig (Template-Engine)

Twig ist eine Template-Engine für die Programmiersprache PHP. Die Syntax wurde von der Template-Engine Jinja sowie der des Django-Frameworks beeinflusst. Twig ist eine freie Software, unter der BSD-Lizenz, und wird von Fabien Potencier betreut. Die erste Version wurde von Armin Ronacher entwickelt. Das PHP-Framework Symfony benutzt Twig als Standard für die Template-Engine.

## Funktionen

* Unterstützung von Kontrollfluss
* automatische Maskierung
* Vererbung von Vorlagen
* variable Filter
* Unterstützung für Internationalisierung mittels gettext
* Makros
* Erweiterbarkeit
Twig wird von den folgenden Integrierte Entwicklungsumgebungen unterstützt:
* Eclipse
* Komodo
* NetBeans
* PhpStorm (nativ)
* Visual Studio
Des Weiteren wird die Templating-Engine von folgenden Editoren unterstützt:
* Atom
* emacs
* Notepad++
* Sublime Text
* TextMate
* vim

## Syntax

Twig arbeitet mit drei Arten von Bezeichnern:
* {{ ... }}, um den Inhalt einer Variable oder das Ergebnis eines Ausdrucks (z. B. um eine vererbte Twig-Vorlage mit {{ parent }}) auszugeben.
* {# ... #}, für Kommentare, die nicht weiter verarbeitet werden
* {% ... %}, für Kommandos und Kontrollstrukturen durch z. B. Schleifen oder Verzweigungen
** {% set foo = 'bar' %}, für die Wertezuweisung.
** {% if i is defined and i == 1%} ... {% endif %}: Bedingte Anweisung und Verzweigung.
** {% for i in 0..10 %} ... {% endfor %}: Schleifen
Der Apostroph (') ist die Escape-Sequenz.
So kann ein iteratives Array auf folgendem Wege erzeugt werden:
Ähnlich gilt dies für Assoziative Datenfelder:

## Operatoren und Vorrang

Die Operatoren und ihr Vorrang ist in folgender Tabelle in aufsteigender Priorität aufgelistet:
| Operator | Funktion |
| b-and | Konjunktion (logisch) |
| b-xor | Kontravalenz (logisch) |
| b-or | Disjunktion (logisch) |
| or | Disjunktion |
| and | Konjunktion |
| == | Gleichheit |
| != | Ungleichheit |
| < | kleiner als |
| > | größer als |
| >= | größer gleich |
| <= | kleiner gleich |
| in | innerhalb |
| matches | korrespondiert |
| starts with | beginnt mit |
| ends with | endet mit |
| .. | Sequenz (z. B.: 1..5) |
| + | Plus |
| - | Minus |
| ~ | Verkettung |
| * | Multiplikation |
| / | Division |
| // | Division (abgerundet) |
| % | Modulo |
| is | Test (ex: ist definiert oder ist nicht leer) |
| ** | Potenz |
| | | Filter |
| | Datenfeld |
| . | Attribut oder Methode eines Objects (z. B.: land.name) |

### Filter

Filter ermöglichen die Weiterverarbeitung eines Ausdrucks vor der Ausgabe und werden durch eine Pipe nach dem Ausdruck eingeleitet. Mögliche Filter sind beispielsweise:
* capitalize: ändert das erste Zeichen einer Zeichenfolge in einen Großbuchstaben.
* upper: ändert alle Zeichen einer Zeichenfolge in Großbuchstaben.
* first: zeigt die erste Zeile eines Datenfeldes an.
* length: gibt die Größe des Variablenwertes zurück.

### Spezielle Variablen

* loop beinhaltet Informationen zur aktuellen Iteration innerhalb einer Schleife. So gibt loop.index die Anzahl der bereits ausgeführten Iterationen zurück.
* Globale Variablen beginnen mit Unterstrichen. Zum Beispiel:
** _route (URL-Teil hinter der Domain)
** _self (eigener Dateiname)
    So wird auf folgendem Weg der Pfad zur Seite angezeigt werden: {{ path(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')) }}
* Die CGI Umgebungsvariablen, z. B. {{ app.request.server.get('SERVER_NAME') }}.

## Beispiel

Das folgende Beispiel zeigt den grundlegenden Einsatz von Twig.