Serie: PHP-Framework Symfony - Teil 1
Mit dem PHP-Framework Symfony und JavaScript- Bibliotheken wie jQuery lassen sich in kurzer Zeit beindruckende Ergebnisse erzielen. Im ersten Teil unserer fünfteiligen Serie wollen wir den Grundstein für einen Webkalender legen. Auf diesem Grundgerüst wird dann in den kommenden Ausgaben aufgebaut.

- Serie: PHP-Framework Symfony - Teil 1
- Layout
Die Verwendung von Frameworks für die Entwicklung von Webanwendungen mit PHP ist heute gang und gäbe. Je nach eigenen Vorlieben kommt dabei eines der vielen frei verfügbaren Frameworks zum Einsatz. Eines der populärsten und ausgereiftesten ist Symfony (www.symfony-project.org ), das aktuell in d...
Die Verwendung von Frameworks für die Entwicklung von Webanwendungen mit PHP ist heute gang und gäbe. Je nach eigenen Vorlieben kommt dabei eines der vielen frei verfügbaren Frameworks zum Einsatz. Eines der populärsten und ausgereiftesten ist Symfony (www.symfony-project.org ), das aktuell in der Version 1.4 zur Verfügung steht und auch die Grundlage für die Umsetzung unserer Beispielanwendung bildet.Neben Symfony werden wir auch noch jQuery (www.jquery.com ) für verschiedene Spielereien der Benutzeroberfläche und der Darstellung des Kalenders einsetzen. Zur Vereinfachung der Arbeit mit CSS nutzen wir zudem noch das CSS-Framework Yaml (www.yaml.de ).
Das Ziel
Im Rahmen dieser und der folgenden vier Ausgaben werden wir eine Kalenderanwendung schreiben. Die Funktionalität beschränkt sich dabei auf diese Features:
- Anzeige eines Kalenders, wahlweise in einer Wochen- oder Monatsansicht
- Blättern zwischen Wochen und Monaten
- Erstellen und Bearbeiten von Kalendereinträgen
- Löschen von Kalendereinträgen
- Anzeige von Eintragsdetails
- E-Mail-Versand für Erinnerungsmails
Framework-Installation

Um mit Symfony zu arbeiten, muss das Framework installiert werden. Die einfachste Art ist die Nutzung des Pear-Installers. Wenn Sie ein Webserver-Paket wie Xampp nutzen, ist dieser bereits fertig nutzbar installiert und Sie können direkt loslegen. Das Ausführen der folgenden beiden Kommandos in einem Windows-Konsolenfenster installiert Symfony automatisch systemweit:
$> pear channel-discover pear.
symfony-project.com
$> pear install symphony/symfony
Sofern die Installation korrekt ausgeführt wurde, steht nun das Symfony-Kommandozeilen- Tool in der Konsole zur Verfügung. Sie können dies ganz einfach testen, indem Sie folgenden Befehl ausführen:
$> symfony -V
Als Resultat sollte die aktuell installierte Symfony-Version ausgegeben werden. Sollte es bei Ihnen Schwierigkeiten mit der Installation geben, weil beispielsweise das Pear-Kommando nicht korrekt installiert ist, so können Sie sich auch das Grundgerüst von der oben genannten Projektseite bei Github herunterladen. In diesem Paket ist auch bereits Symfony enthalten, sodass Sie auf eine Pear-Installation verzichten können.
Grundgerüst
Vorteil bei der Entwicklung mit dem Symfony- Framework ist, dass es viele Vorgänge bereits automatisiert, die normalerweise innerhalb einer Entwicklungsumgebung stattfinden. Dazu stellt Symfony ein Tool zur Verfügung, das in der Windows-Konsole verwendet wird. Sie werden sich während der Entwicklung einer Symfony-Anwendung also recht häufig in einem Konsolenfenster wiederfinden, um die verschiedensten Operationen auszuführen.Auch die ersten Schritte zur Erstellung einer Anwendung finden auf Kommandozeilenebene statt. Zuerst benötigen Sie allerdings ein Verzeichnis, das per Browser erreichbar ist. Bei einer Apache-Installation ist dies beispielsweise das htdocs-Verzeichnis. Legen Sie sich hierunter ein neues Verzeichnis für unser Projekt an (beispielsweise sfcalendar). Öffnen Sie ein Konsolenfenster, navigieren Sie dort zum gerade angelegten Verzeichnis und führen die folgenden Befehle aus:
$> symfony generate:project Calendar
$> symfony generate:app frontend
$> symfony generate:app backend
Jeder dieser Befehle hat zur Folge, dass eine Menge von Verzeichnissen und Dateien angelegt werden. Durch das Ausführen der Befehle haben wir nun das komplette Grundgerüst eines Symfony-Projektes inklusive zweier unterschiedlicher Anwendungen, die sich eine Projektumgebung teilen.Die frontend genannte Anwendung wird im späteren Verlauf für die Darstellung des Kalenders für den Besucher der Seite zuständig sein. Das backend dient zur Verwaltung des Kalenders. Dank des Kommandozeilentools müssen wir uns um das lästige Anlegen der Verzeichnisstrukturen und Konfigurationsdateien nicht selbst kümmern.
Module und Aktionen
Symfony ist ein sogenanntes Model-View-Controller-Framework, in dem die einzelnen Quellcode-Teile entsprechend ihrer Aufgaben getrennt werden. Dabei unterscheidet man die folgenden Bereiche:
- Model: Im Model-Bereich sind alle Anwendungsteile zusammengefasst, die für die Verwaltung der Daten in einer Datenbank oder einer Datei verantwortlich sind.
- View: Alles was mit der Ausgabe und Aufbereitung von Daten als HTML, Json oder XML zu tun hat, ist hier untergebracht.
- Controller: Dieser Bereich wird auch als Steuerungslogik bezeichnet. Der Aufruf einer URL der Anwendung führt dazu, dass ein entsprechender Controller gestartet wird, der dann die weiteren Schritte einleitet. Controller steuert die Model- und View-Schicht.
Symfony bietet zudem für jeden der Bereiche eigene Klassen und Helfer, die das Schreiben der Anwendung deutlich erleichtern. Ein Symfony-Projekt ist neben den bereits erwähnten Anwendungen, in einzelne Module aufgeteilt.In unserem Fall besteht die Anwendung Frontend nur aus einem einzelnen Modul mit dem Namen calendar. Dieses Modul wird wieder über das bereits verwendete Symfony-Kommandozeilen- Tool erstellt. Dazu wird der folgende Befehl ausgeführt:
$> php symfony generate:module
frontend calendar

Anhand der Ausgaben des Befehls können Sie erkennen, dass Symfony wieder eine Reihe von Verzeichnissen und Dateien angelegt hat. Diese befinden sich ausschließlich im Verzeichnis apps/frontend/calendar. Eine umfangreichere Symfony- Anwendung besteht natürlich aus mehreren Modulen. Unser Modul calendar wird ausschließlich für die Darstellung und Verwaltung des Kalenders zuständig sein und kann bereits jetzt aufgerufen werden.Steuern Sie mit dem Browser Ihrer Wahl unser angelegtes Verzeichnis an (beispielsweise mit https://localhost/sfcalendar/calendar/index ) und Sie werden von einer Symfony- Standardwebseite begrüßt, die Sie auch in einer der Abbildungen dieses Artikels sehen können.
Templates
Bislang haben wir keine einzige Zeile Quellcode geschrieben, was wir aber nun nachholen werden. Als Erstes wollen wir uns eine Action anlegen, die für die Anzeige des Kalenders verantwortlich ist. Dazu fügen wir in die Datei apps/frontend/modules/calendar/actions/action.class.php den folgenden Quellcode ein:
class calendarActions extends
sfActions {
public function executeShow
(sfWebRequest $request) {
return sfView::SUCCESS;
}
...
}
Diese Funktion ist ein Controller, im Symfony- Sprachgebrauch Action genannt. Per Default besitzt Symfony Regeln, die eine direkte Zuordnung zwischen URL und Action ermöglichen. Der Aufruf der URL https://localhost/sfcalendar/calendar/show ist für Symfony die Aufforderung die Action show (die Funktion executeShow) des Moduls calendar auszuführen. Dies ist ein Beispiel, wie bei Symfony Dinge per Namenskonventionen zusammenspielen und Sie außer der richtigen Benennung nichts weiter tun müssen.