Whatsapp Telegram Telegram Call Anrufen

Twig Template-Engine in Symfony


Twig ist die Standard-Template-Engine von Symfony und bietet eine saubere, verständliche Syntax für das Erstellen von Vorlagen. Sie ermöglicht es Entwicklern, das Frontend und das Backend klar zu trennen, was die Wartung und Entwicklung von Anwendungen erleichtert. In diesem Artikel werden wir die folgenden Themen ausführlich behandeln:

  1. Einführung in die Twig-Syntax
  2. Variablen, Filter und Funktionen
  3. Template-Vererbung und Layout-Management
  4. Einbinden und Einbetten von Templates
  5. Asset-Management in Twig


1. Einführung in die Twig-Syntax

1.1 Was ist Twig?

Twig ist eine moderne Template-Engine für PHP, die von SensioLabs, den Entwicklern von Symfony, entwickelt wurde. Sie wurde entworfen, um sicher, schnell und flexibel zu sein. Twig bietet:

  • Klare Syntax: Ähnlich wie Jinja2 in Python oder Django-Templates.
  • Sicherheit: Automatische Escaping-Mechanismen verhindern XSS-Angriffe.
  • Erweiterbarkeit: Möglichkeit, benutzerdefinierte Funktionen, Filter und Tags zu erstellen.

1.2 Grundlegende Syntax

Twig verwendet spezielle Syntax-Elemente, um Anweisungen in Templates zu markieren:

  • Variablen-Ausgabe: {{ variable }}
  • Anweisungen/Kontrollstrukturen: {% ... %}
  • Kommentare: {# ... #}

Beispiel:

<!DOCTYPE html>
<html>
<head>
    <title>Meine Webseite</title>
</head>
<body>
    <h1>Willkommen, {{ name }}!</h1>
    {% if is_logged_in %}
        <p>Sie sind eingeloggt.</p>
    {% else %}
        <p>Bitte loggen Sie sich ein.</p>
    {% endif %}
</body>
</html>

1.3 Kommentare

Kommentare in Twig werden nicht im endgültigen HTML angezeigt.

{# Dies ist ein Kommentar und wird nicht gerendert #}

2. Variablen, Filter und Funktionen

2.1 Variablen

Variablen werden in den Controller-Methoden definiert und an das Template übergeben.

Beispiel im Controller:

public function index()
{
    return $this->render('index.html.twig', [
        'name' => 'Max Mustermann',
        'is_logged_in' => true,
    ]);
}

Verwendung im Template:

{{ name }}

2.2 Filter

Filter modifizieren die Ausgabe von Variablen. Sie werden mit dem Pipe-Symbol | angewendet.

Häufig verwendete Filter:

  • upper: Wandelt einen String in Großbuchstaben um.
  • lower: Wandelt einen String in Kleinbuchstaben um.
  • title: Wandelt den ersten Buchstaben jedes Wortes in Großbuchstaben um.
  • length: Gibt die Länge einer Sequenz oder eines Strings zurück.
  • date: Formatiert ein Datum.

Beispiel:

{{ name|upper }}  {# Ausgabe: MAX MUSTERMANN #}
{{ name|lower }}  {# Ausgabe: max mustermann #}

2.3 Funktionen

Funktionen führen bestimmte Aktionen aus oder geben Werte zurück.

Häufig verwendete Funktionen:

  • include(): Fügt ein anderes Template ein.
  • path(): Generiert eine URL basierend auf einem Routen-Namen.
  • asset(): Generiert die URL zu einem Asset (CSS, JS, Bilder).
  • dump(): Gibt den Inhalt einer Variablen aus (nützlich für Debugging).

Beispiel:

<a href="{{ path('homepage') }}">Startseite</a>

2.4 Kombination von Filtern und Funktionen

Sie können Filter und Funktionen kombinieren.

Beispiel:

{{ user.registrationDate|date('d.m.Y') }}

3. Template-Vererbung und Layout-Management

3.1 Prinzip der Vererbung

Twig ermöglicht die Vererbung von Templates, was die Wiederverwendbarkeit und Konsistenz fördert. Ein Basis-Layout kann erstellt werden, von dem andere Templates erben.

3.2 Erstellung eines Basis-Layouts

Basis-Template base.html.twig:

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Meine Webseite{% endblock %}</title>
    {% block stylesheets %}
        <link rel="stylesheet" href="{{ asset('css/styles.css') }}">
    {% endblock %}
</head>
<body>
    {% block body %}{% endblock %}
    {% block javascripts %}
        <script src="{{ asset('js/scripts.js') }}"></script>
    {% endblock %}
</body>
</html>

3.3 Ableitung von Templates

Beispiel index.html.twig:

{% extends 'base.html.twig' %}

{% block title %}Startseite - Meine Webseite{% endblock %}

{% block body %}
    <h1>Willkommen auf der Startseite</h1>
    <p>Dies ist der Inhalt der Startseite.</p>
{% endblock %}

3.4 Blöcke definieren und überschreiben

  • Definieren von Blöcken: Mit {% block blockname %}{% endblock %} im Basis-Template.
  • Überschreiben von Blöcken: Mit {% block blockname %}{% endblock %} im abgeleiteten Template.

Verschachtelung von Blöcken:

Sie können Blöcke innerhalb von Blöcken definieren.

{% block content %}
    {% block article %}
        <p>Artikel-Inhalt</p>
    {% endblock %}
{% endblock %}

3.5 Verwendung des parent()-Funktion

Mit {{ parent() }} können Sie den Inhalt des übergeordneten Blocks einbeziehen.

Beispiel:

{% block title %}
    {{ parent() }} - Zusätzlicher Titel
{% endblock %}

4. Einbinden und Einbetten von Templates

4.1 Einbinden von Templates mit include()

include() ermöglicht es, ein anderes Template einzufügen, ohne die Template-Vererbung zu verwenden.

Beispiel:

<div class="sidebar">
    {{ include('partials/sidebar.html.twig') }}
</div>

4.2 Variablen an inkludierte Templates übergeben

Sie können Variablen an das inkludierte Template übergeben.

{{ include('partials/sidebar.html.twig', { 'categories': categoryList }) }}

Im inkludierten Template partials/sidebar.html.twig:

<ul>
    {% for category in categories %}
        <li>{{ category.name }}</li>
    {% endfor %}
</ul>

4.3 Einbetten von Templates mit embed

embed kombiniert include und extends, sodass Sie Blöcke im eingebetteten Template überschreiben können.

Beispiel:

{% embed 'partials/panel.html.twig' with {'title': 'Neuigkeiten'} %}
    {% block content %}
        <p>Hier sind die neuesten Neuigkeiten.</p>
    {% endblock %}
{% endembed %}

In partials/panel.html.twig:

<div class="panel">
    <h2>{{ title }}</h2>
    <div class="panel-content">
        {% block content %}{% endblock %}
    </div>
</div>

4.4 Verwendung von macro für wiederverwendbare Komponenten

Mit Makros können Sie wiederverwendbare Template-Funktionen erstellen.

Definieren eines Makros in macros.html.twig:

{% macro render_table(rows) %}
    <table>
        {% for row in rows %}
            <tr>
                {% for column in row %}
                    <td>{{ column }}</td>
                {% endfor %}
            </tr>
        {% endfor %}
    </table>
{% endmacro %}

Verwendung des Makros:

{% import 'macros.html.twig' as mymacros %}

{{ mymacros.render_table(data) }}

5. Asset-Management in Twig

5.1 Verwendung der asset()-Funktion

Die asset()-Funktion generiert die URL zu einem Asset, das im public/-Verzeichnis Ihrer Symfony-Anwendung liegt.

Beispiel:

<link rel="stylesheet" href="{{ asset('css/styles.css') }}">
<img src="{{ asset('images/logo.png') }}" alt="Logo">

5.2 Asset-Versionierung und Cache-Busting

Um sicherzustellen, dass Benutzer immer die aktuelle Version Ihrer Assets laden, können Sie eine Versionsnummer hinzufügen.

Konfiguration in config/packages/framework.yaml:

framework:
    assets:
        version: 'v1.0.0'
        version_format: '%%s?version=%%s'

Verwendung in Twig:

<link rel="stylesheet" href="{{ asset('css/styles.css') }}">

Die generierte URL wäre dann:

/css/styles.css?version=v1.0.0

5.3 Integration mit Webpack Encore

Webpack Encore ist ein Wrapper für Webpack, der die Asset-Verwaltung vereinfacht.

Installation von Webpack Encore:

yarn add @symfony/webpack-encore --dev

Konfiguration von Webpack Encore:

Erstellen Sie die Datei webpack.config.js:

const Encore = require('@symfony/webpack-encore');

Encore
    .setOutputPath('public/build/')
    .setPublicPath('/build')
    .addEntry('app', './assets/js/app.js')
    .enableSingleRuntimeChunk()
    .cleanupOutputBeforeBuild()
    .enableSourceMaps(!Encore.isProduction())
    .enableVersioning(Encore.isProduction())
;

module.exports = Encore.getWebpackConfig();

Verwendung in Twig:

{% block stylesheets %}
    {{ encore_entry_link_tags('app') }}
{% endblock %}

{% block javascripts %}
    {{ encore_entry_script_tags('app') }}
{% endblock %}

5.4 Vorteile der Verwendung von Webpack Encore

  • Automatische Versionierung und Hashing: Hilft beim Cache-Busting.
  • Unterstützung von ES6, Sass, React, Vue.js: Moderne Frontend-Technologien.
  • Optimierung: Minimierung und Bündelung von Assets für bessere Leistung.

Zusammenfassung

Die Twig-Template-Engine bietet eine leistungsstarke und flexible Möglichkeit, die Darstellung Ihrer Symfony-Anwendungen zu gestalten. Durch das Verständnis der Twig-Syntax, der Verwendung von Variablen, Filtern und Funktionen sowie der effizienten Verwaltung von Layouts und Assets können Sie saubere und wartbare Templates erstellen.

Weiterführende Ressourcen


CEO Image

Ali Ajjoub

info@ajjoub.com

Adresse 0049-15773651670

Adresse Jacob-winter-platz,1 01239 Dresden

Buchen Sie jetzt Ihren Termin für eine umfassende und individuelle Beratung.

Termin Buchen

Kontaktieren Sie uns

Lassen Sie uns K o n t a k t aufnehmen!