Zum Inhalt springen
Der Guide für ein smartes Leben.
Code-Symfony

Teil 3: Serie: PHP-Frameworks Teil 2 - Symfony im Detail

Autoren: Redaktion pcmagazin und Timo Haberkern • 22.7.2009 • ca. 1:50 Min

Das Ergebnis sind eine Reihe von Klassen für jede Datenbanktabelle. Diese Klassen sind für den eigentlichen Zugriff auf die Datenbank erforderlich. Für alltägliche Operationen sind keine SQL-Befehle mehr notwendig. Das nächste Beispiel zeigt das Anlegen eines neuen Artikels und das darauf fol...

Das Ergebnis sind eine Reihe von Klassen für jede Datenbanktabelle. Diese Klassen sind für den eigentlichen Zugriff auf die Datenbank erforderlich.

Für alltägliche Operationen sind keine SQL-Befehle mehr notwendig. Das nächste Beispiel zeigt das Anlegen eines neuen Artikels und das darauf folgende Speichern in der Datenbank. Der Primärschlüssel, in diesem Fall ist dies das Feld id, wird dabei nach dem Speichern automatisch mit dem entsprechenden Schlüsselwert aus der Datenbank gefüllt.

<?php
$value = new Article();
$value->name = 'V21A Kollektor';
$value->article_number = '164304';
$value->save();
echo 'ID='.$value->id;
?>

Ähnlich einfach ist das Lesen von Daten mit einem bekannten Schlüsselfeld. Das geladene Objekt kann anschließend verändert, gespeichert oder auch gelöscht werden.

<?php
// Lesen von Werten
$value = Doctrine::getTable
('Article')->find($id);
// Verändern
$value->name = 'Geänderter Wert';
$value->save();
// Löschen
$value->delete();
?>

Diese Art des Datenbankzugriffs ist für einfache Zugriffe ausreichend, etwa für Operationen auf einem Datensatz von dem der Primärschlüssel bekannt ist. Für komplexere Dinge bieten die beiden Zugriffslayer Propel und Doctrine eigene objektorientierte Abfragesprachen an.

Die Doctrine Query Language (DQL) ist hierbei besonders effektiv und elegant. Wie im folgenden Beispiel zu sehen, orientiert sich die Abfragesprache an SQL und ist daher für erfahrene Entwickler schnell und einfach erlernbar.

<?php
// Einfacher lesender Zugriff
$query = new Doctrine_Query();
$query->from('Author a')->where("a.
LastName = 'Haberkern'");
$result = $query->execute();
// Lesender Zugriff mit Joins
$query->from('Author a')
->leftJoin('a.Books b')
->innerJoin('a.Publisher p WITH
a.id > 3')
$users = $query->execute();
?>

Propel geht hier einen etwas anderen Weg, der nicht ganz so eingänglich, aber nicht minder leistungsfähig ist.

View

Die View-Schicht ist, wie eingangs erwähnt, das Bindeglied zwischen der Anwendungs- und Datenbanklogik und dem Benutzer. Dieser Schicht werden alle Bestandteile zugeordnet, die zur Erstellung und Anzeige von HTML-Seiten notwendig sind. Des Weiteren werden bei der Entwicklung mit Symfony Inhalt und Gestaltung klar voneinander getrennt.

Die View-Klassen sind für die Ausgabe der Daten als HTML-Seite verantwortlich und nutzen Templates zur Ausgabe. Dadurch lässt sich das Design einer Anwendung zu einem späteren Zeitpunkt sehr einfach verändern.

Jede Seite kann dabei aus mehreren Templates (sogenannten Partials) bestehen. So lassen sich Elemente, die auf allen Seiten vorkommen, in einem Partial zusammenfassen. Dadurch wird redundanter Quellcode vermieden. Die Template-Ausgaben einer Operation werden zudem in ein übergeordnetes Layout der Anwendung eingebettet.