Template-Muster: Logik und Darstellung trennen
Verlagern Sie die Geschäftslogik in PHP-Dateien und halten Sie HTML-Templates übersichtlich.
Template-Muster: Logik und Darstellung trennen ist eine kostenlose PHP Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des PHP Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Logik und View trennen?
Wenn Datenbankabfragen, Geschäftslogik und HTML in derselben Datei vermischt werden, führt das zu:
- Schwer lesbarem Spaghetti-Code
- Schwierigkeiten beim Testen und Wiederverwenden der Logik
- Sicherheitsfehlern, wenn die Validierung übersprungen wird
Die Lösung: Halten Sie jede Zuständigkeit in ihrer eigenen Schicht.
Das einfache Template-Muster
Führen Sie zuerst die gesamte PHP-Logik aus und geben Sie anschließend HTML aus:
<?php
// --- LOGIC (top) ---
require 'config.php';
$userId = (int) ($_GET['id'] ?? 0);
$user = getUserById($userId);
if (!$user) {
http_response_code(404);
require '404.php';
exit;
}
$pageTitle = 'Profile: ' . $user['name'];
// --- VIEW (bottom) ---
require 'layout/header.php';
?>
<main>
<h1><?= htmlspecialchars($user['name']) ?></h1>
</main>
<?php require 'layout/footer.php'; ?>Controller- und View-Dateien trennen
Teilen Sie den Code in eine Controller-Datei und eine View-Datei auf:
// profile.php (controller)
<?php
require 'config.php';
$userId = (int) ($_GET['id'] ?? 0);
$user = getUserById($userId);
$posts = getPostsByUser($userId);
if (!$user) { require '404.php'; exit; }
require 'views/profile.view.php';
// views/profile.view.php (view) — only HTML and echoes
// No DB calls allowed here!View-Daten vorbereiten
Formatieren Sie alle Daten in der Logikschicht, bevor Sie sie an die View übergeben:
<?php
$user = getUserById($id);
$viewData = [
'userName' => htmlspecialchars($user['name']),
'avatarUrl' => $user['avatar'] ?? '/default.png',
'joinedDate' => date('F Y', strtotime($user['created_at'])),
'isAdmin' => in_array('admin', $user['roles']),
];
extract($viewData); // Makes $userName, $avatarUrl, etc.
require 'views/profile.view.php';Template-Funktionsmuster
Kapseln Sie das Rendern einer View für eine sauberere Wiederverwendung in einer Funktion:
<?php
function render(string $view, array $data = []): void {
extract($data); // Create variables from array
require __DIR__ . '/views/' . $view . '.php';
}
// Usage:
render('profile', [
'name' => $user['name'],
'email' => $user['email'],
]);Template-Engine mit Ausgabepufferung
Rendern Sie ein Template und geben Sie es als Zeichenkette zurück:
<?php
function renderToString(string $view, array $data = []): string {
extract($data);
ob_start();
require __DIR__ . '/views/' . $view . '.php';
return ob_get_clean();
}
$html = renderToString('email/welcome', ['name' => 'Alice']);
mail($to, 'Welcome!', $html, 'Content-Type: text/html');Wann Sie eine Template-Engine verwenden sollten
Für einfache Websites reicht das native PHP-Templating aus. Ziehen Sie Twig oder Blade in Betracht, wenn:
- Sie standardmäßig automatisches Escaping wünschen
- Designer Templates ohne PHP-Kenntnisse bearbeiten müssen
- Sie Template-Vererbung und Makros benötigen
- das Projekt viele Views umfasst und stark wächst
Twig-Beispiel
Twig, das von Symfony verwendet wird, bietet eine übersichtliche Syntax mit automatischem Escaping:
<?php
// After: composer require twig/twig
$loader = new Twig\Loader\FilesystemLoader('/templates');
$twig = new Twig\Environment($loader, ['cache' => '/tmp/twig']);
echo $twig->render('profile.html.twig', [
'user' => $user,
'posts' => $posts,
]);
// profile.html.twig:
// <h1>{{ user.name }}</h1> -- auto-escaped by defaultMVC-Verzeichnisstruktur
Eine minimale MVC-Struktur für reine PHP-Projekte:
project/
controllers/
UserController.php -- handles request, calls model
models/
User.php -- database queries
views/
users/
profile.php -- display only, no logic
public/
index.php -- front controller (router)Front-Controller-Muster
Leiten Sie alle Anfragen über einen einzigen Einstiegspunkt:
<?php
// public/index.php (front controller)
require __DIR__ . '/../vendor/autoload.php';
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$routes = require '../routes.php';
if (isset($routes[$uri])) {
[$controller, $action] = $routes[$uri];
(new $controller)->$action();
} else {
http_response_code(404);
require '../views/404.php';
}Single-Responsibility-Prinzip
Jede Datei sollte genau einen Grund für eine Änderung haben:
- Model: ändert sich nur, wenn sich die Datenstruktur oder Abfragelogik ändert
- Controller: ändert sich nur, wenn sich die Logik zur Anfrageverarbeitung ändert
- View: ändert sich nur, wenn sich die Benutzeroberfläche oder das Layout ändert
Dadurch lässt sich jeder Teil unabhängig leichter testen und warten.
Schnelltest
Was ist der wichtigste Vorteil der Trennung von PHP-Logik und HTML-View-Code?
Zusammenfassung: Template-Muster
Wichtige Erkenntnisse:
- Führen Sie zuerst die gesamte Logik aus und geben Sie anschließend HTML aus
- Trennen Sie Controller- und View-Dateien
- Verwenden Sie eine render()-Funktion mit extract()
- Die Ausgabepufferung erfasst gerendertes HTML
- Ziehen Sie Twig/Blade für größere Projekte in Betracht
- Der Front Controller leitet alle Anfragen an Handler weiter
Häufig gestellte Fragen
Ist die Lektion „Template-Muster: Logik und Darstellung trennen“ kostenlos?
Ja — der vollständige Text von „Template-Muster: Logik und Darstellung trennen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des PHP Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der PHP Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Template-Muster: Logik und Darstellung trennen“?
Verlagern Sie die Geschäftslogik in PHP-Dateien und halten Sie HTML-Templates übersichtlich. Du übst PHP Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um PHP Academy zu starten?
Keine Vorkenntnisse erforderlich. PHP Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Template-Muster: Logik und Darstellung trennen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser PHP Academy-Lektion Code schreiben und ausführen?
Ja. Jede PHP Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- PHP-Tags und Syntax zum Einbetten
- Dynamisches HTML mit PHP-Schleifen
- Dateien einbinden und anfordern
- Template-Muster: Logik und Darstellung trennen