Development

Documentation/de_DE/book/1.0/01-Introducing-Symfony

You must first sign up to be able to contribute.

ARBEITSENTWURF ROHÜBERSETZUNG / TRANSLATION WORKING DRAFT
Originaldokument: ?, Version ? vom ?
Übersetzungsfortschritt: 100%
Übersetzung: ED
Korrekturfortschritt: 0%

Kapitel 1 - Einführung in Symfony

Was kann Symfony? Was ist erforderlich um es zu nutzen? Diese Kapitel wird diese Fragen beantworten.

Symfony in Kürze

Ein Framework rationalisiert die Anwendungsentwicklung durch die Automatisierung vieler der Anwendungsmuster, die zum Erreichen eines vorgegebenen Ziels eingesetzt werden. Es strukturiert außerdem den Quelltext und regt damit den Entwickler an besseren, lesbareren und wartungsfreundlicheren Quelltext zu schreiben. Schlussendlich erleichert ein Framework das Programmieren, da komplexe Funktionen durch einfache Anweisungen gekapselt werden.

Symfony ist ein vollständiges Framework, das aufgrund verschiedener Merkmale für die Entwicklung von Webanwendungen vorgesehen ist. Zunächst einmal trennt Symfony Anwendungsmodell, -steuerung und -darstellung. Das Framework enthält zahlreiche Werkzeuge und Klassen zur Verkürzung der Entwicklungszeit einer komplexen Webanwendung. Zusätzlich werden gängige Aufgaben automatisiert, sodass sich der Entwickler gänzlich auf die spezifischen Anforderungen der Anwendung konzentrieren kann. Das Endergebnis dieser Vorteile ist, dass man das Rad nicht jedes Mal neu erfinden muss, wenn eine neue Anwendung erstellt wird!

Symfony ist vollständig in PHP 5 geschrieben. Es wurde in mehreren realen Projekten gründlich getestet und wird sogar von stark beanspruchten E-Business-Webseiten genutzt. Es besteht Kompatibilität zu den meisten gängigen Datenbanken, MySQL, PostgreSQL, Oracle und Microsoft SQL Server inbegriffen. Das Framework funktioniert auf *nix- und Windows-Plattformen. Werfen wir nun einen tieferen Blick auf die Fähigkeiten.

Symfonys Fähigkeiten

Symfony wurde unter der Maßgabe entwickelt die folgenden Anforderungen zu erfüllen:

  • einfache Installation und Konfiguration auf den meisten Systemen (garantierte Lauffähigkeit auf *nix und Windows)
  • Datenbankunabhängigkeit
  • in den meisten Fällen einfache Verwendbarkeit, aber dennoch flexibel genug um sich komplexen Anwendungsfällen anzupassen
  • basierend auf der Prämisse Gewohnheit geht vor Konfiguration--der Entwickler muss lediglich die ungewöhnlichen Dinge konfigurieren
  • konform mit den meisten optimalen Verfahren und Anwendungsmustern der Webanwendungsentwicklung
  • bereit für den Unternehmenseinsatz--anpassungsfähig an bestehende Grundsätze und Architekturen der Informationstechnologie (IT), und beständig genug für langfristige Projekte
  • sehr lesbarer Code mit phpDocumentor-Kommentaren zur Erleichterung der Wartung
  • einfache Erweiterbarkeit, die das Einbinden weiterer Bibliotheken problemlos ermöglicht

Automatisierte Funktionen für Webprojekte

Die meisten gebräuchlichen Funktionen von Webprojekten sind in Symfony automatisiert worden, und zwar folgende:

  • Die enthaltene Internationalisierung erlaubt sowohl für Daten als auch für Bedienoberflächen Übersetzungen sowie Lokalisierungen.
  • Die Darstellung verwendet Templates und Layouts, die von HTML-Designern ohne Wissen über das Framework erzeugt werden können. Helfer (Helpers) verringern die Menge an Quelltext, der der Darstellung dient, da sie große Quelltextmengen durch einfache Funktionsaufrufe kapseln.
  • Formulare unterstützen automatische Validierung und Wiederbefüllung. Das garantiert eine hohe Qualität der Daten in der Datenbank und sorgt für eine erhöhte Nutzerfreundlichkeit.
  • Das Escapen von Ausgaben schützt die Anwendung vor Attacken mittels fehlerhafter Daten.
  • Das Cache-Management reduziert die Bandbreitennutzung und die Serverauslastung.
  • Authentifikation und Berechtigungen vereinfachen das Anlegen von eingeschränkt nutzbaren Bereichen sowie das Benutzermanagement.
  • Das Routing und elegante URLs beziehen die Adresse in die Benutzeroberfläche mit ein und sorgen für suchmaschinenfreundliche URLs.
  • Die eingebaute E-Mail-Funktionalität und das API ermöglicht Webanwendungen Interaktionen, die über die klassische Browserkommunikation hinaus gehen.
  • Listen sind dank automatischer Seitenaufteilung, Sortierung und Filtern viel benutzerfreundlicher.
  • Factories, Plugins und Kombinationen der beiden Möglichkeiten sorgen für eine hohe Erweiterbarkeit.
  • Ajax Interaktionen können aufgrund einzeiliger Helfer, hinter denen sich plattformübergreifend kompatibles Javascript verbirgt, schnell implementiert werden.

Entwicklungsumgebung und Tools

Um die Anforderungen von Unternehmen, die ihre eigenen Quelltextrichtlinien und Projektmanagementregeln haben, zu erfüllen, kann Symfony vollständig den eigenen Wünschen angepasst werden. Das Framework enthält standardmäßig mehrere Entwicklungsumgebungen und ist mit mehreren Tools ausgestattet, die gängige Aufgaben der Softwareentwicklung automatisieren:

  • Die Codeerzeugungswerkzeuge sind hilfreich für das Prototyping und Ein-Klick-Administrationsoberflächen.
  • Das enthaltene Framework für funktionale und Unit-Tests bietet die perfekten Werkzeuge für die testgestützte Entwicklung.
  • Die Debug-Oberfläche beschleunigt die Fehlersuche, da sie alle Informationen der aktuellen Seite darstellt, die ein Entwickler benötigt.
  • Über die Kommandozeile kann die Anwendungsauslieferung auf einen Server automatisiert werden.
  • Konfigurationsänderungen im laufenden System sind möglich und wirksam.
  • Die Protokollierung gibt Administratoren detaillierten Aufschluss über die Anwendungsabläufe.

Wer hat Symfony entwickelt und warum?

Die erste Version von Symfony wurde im Oktober 2005 durch den Projektgründer Fabien Potencier, Co-Autor dieses Buchs, veröffentlicht. Fabien ist der Geschäftsführer von Sension (http://www.sensio.com/), einer französischen Internetagentur, die für ihre innovativen Ansichten im Bereich Web Development bekannt ist.

Im Jahr 2003 hatte sich Fabien einige Zeit nach vorhandenen Open Source Entwicklungstools für PHP-Webanwendungen erkundigt. Er fand heraus, dass keines die vorher formulierten Anforderungen erfüllte. Als PHP 5 veröffentlicht wurde, beschloss er, dass die vorhandenen Tools einen ausreichend ausgereiften Eindruck machten um in ein vollständiges Framework integriert zu werden. Er verbrachte anschließend ein Jahr damit den Kern von Symfony zu entwickeln, der auf dem Mojavi Model-View-Controller (MVC) Framework, Propel zur Abbildung von objektorientierten Daten auf relationale Daten (ORM) und den Ruby on Rails Template-Helfern basiert.

Fabien entwickelte Symfony ursprünglich für Sensio-Projekte, da die Verfügbarkeit eines effizienten Frameworks eine exzellente Möglichkeit zur schnelleren und wirtschaftlicheren Anwendungsentwicklung darstellt. Web Development wird auch intuitiver, die entstehenden Anwendungen sind stabiler und leichter wartbar. Das Framework kam auf den Prüfstand, als es zur Entwicklung einer E-Commerce-Website eines Dessous-Händlers eingesetzt wurde, und fand danach in weiteren Projekten Anwendung.

Nach dem erfolgreichen Einsatz von Symfony in einigen Projekten entschied sich Fabien es unter einer Open Source Lizenz zu veröffentlichen. Er spendete damit seine Arbeit der Gemeinschaft um von der Nutzerresonanz zu profitieren, um Sensios Erfahrung zu präsentieren, und natürlich weil es Spaß macht.

Note Warum "symfony" und nicht "FooBarFramework"? Weil Fabien einen kurzen Namen suchte, der wie Sensio ein s enthält, und ein f wie Framework--einfach zu merken und nicht mit einem anderen Entwicklungstool verknüpft. Außerdem mag er keine Großbuchstaben. symfony kam dem am nähesten, auch wenn nicht gänzlich Englisch, und auch wenn es als Projektname existiert. Die Alternative war "baguette".

Damit Symfony ein erfolgreiches Open Source Projekt werden konnte, brauchte es eine ausführliche Dokumentation um die Anzahl der Einsätze zu erhöhen. Fabien fragte einen Mitbeschäftigten von Sensio, François Zaninotto, den anderen Autor dieses Buchs, sich durch den Quelltext zu "wühlen" und ein Online-Buch darüber zu schreiben. Es dauerte eine ganze Weile, aber als das Projekt an die Öffentlichkeit trat, war es gut genug dokumentiert um zahlreiche Entwickler anzusprechen. Der Rest ist Geschichte.

Die Symfony-Community

Sowie die Symfony-Website (http://www.symfony-project.com/) gestartet wurde, luden sich zahlreiche Entwickler aus der ganzen Welt das Framework herunter, lasen die Online-Dokumentation, und entwickelten ihre ersten Symfony-Anwendungen, und die Begeisterung begann zu steigen.

Frameworks für Webanwendungen wurden zu dieser Zeit zunehmend verbreitet, und die Nachfrage nach einem kompletten Framework in PHP war groß. Symfony bot eine bestechende Lösung dank seiner beeindruckenden Code-Qualität und einer aussagekräftigen Dokumentation--zwei bedeutende Vorteile gegenüber den anderen Akteuren in der Kategorie Frameworks. Bald tauchten Mitstreiter auf, schlugen Patches und Verbesserungen vor, lasen die Dokumentation Korrektur, und übernahmen weitere dringend gebrauchte Aufgaben.

Das öffentliche Repository der Quellen und das Ticket-System boten eine Vielzahl von Möglichkeiten mitzuwirken, und alle Freiwilligen sind willkommen. Fabien ist immer noch der Hauptakteur im Trunk des Quelltext-Repositorys und garantiert die Code-Qualität.

Heutzutage bieten das Symfony-Forum, die Mailing-List und ein IRC-Channel (Internet Relay Chat) optimale Anlaufpunkte für Unterstützung, durchschnittlich vier Antworten entfallen durchschnittlich auf eine Frage. Täglich installieren Neulinge Symfony, das Wiki und die Sammlung von Code-Schnipseln bieten viel von Nutzern beigesteuerte Dokumentation. Die bekannte Anzahl von Symfony-Anwendungen steigt durchschnittlich um 5 pro Woche, Tendenz steigend.

Die Symfony-Community ist die dritte Kraft des Framworks, und wir hoffen, dass Sie nach dem Lesen dieses Buchs beitreten.

Ist Symfony für mich geeignet?

Ob Sie ein PHP5-Experte oder ein Neuling auf dem Gebiet der Programmierung von Webanwendungen sind, Sie werden Symfony benutzen können. Der ausschlaggebende Faktor, ob Symfony eingesetzt werden sollte oder nicht, ist die Größe des Projekts.

Wenn Sie eine einfache Website mit fünf bis zehn Seiten erstellen wollen, begrenzt auf die Datenbank zugegriffen wird und keine Verpflichtung besteht Geschwindigkeit und Dokumentation sicherzustellen, sollten Sie sich allein an PHP halten. Der Gewinn durch ein Framework wäre gering, die Verwendung von Objektorientierung oder eines MVC-Modells würde wahrscheinlich nur den Entwicklungsprozess verlangsamen. Eine Randbemerkung: Symfony ist nicht für den effizienten Einsatz auf einem Shared-Server-System optimiert, wo PHP-Skripte nur im CGI-Modus laufen können.

Wenn Sie andererseits komplexe Webanwendungen mit anspruchsvoller Geschäftslogik entwickeln, ist PHP allein nicht genug. Wenn Sie die Wartung und Weiterentwicklung Ihrer Anwendung in der Zukunft planen, brauchen Sie leichtgewichtigen, lesbaren und effektiven Quelltext. Wenn Sie die neuesten Fortschritte auf dem Gebiet der Benutzerinteraktion (wie AJAX) intuitiv verwenden wollen, können Sie nicht einfach hunderte Zeilen JavaScript schreiben. Wenn Sie Spaß haben und schnell entwickeln wollen, wird PHP allein vermutlich unbefriedigend sein. In allen genannten Fällen ist Symfony für Sie geeignet.

Und natürlich, wenn Sie ein professioneller Webanwendungsentwickler sind, der bereits all die Vorteile eines Frameworks für Webanwendungen kennt, und ein ausgereiftes, gut dokumentiertes Framework mit großer Community benötigt. Suchen Sie nicht weiter, Symfony ist Ihre Lösung.

TIP Wenn Sie eine optische Demonstration suchen, schauen Sie sich die verfügbaren Screencasts auf der Symfony-Website an. Sie werden sehen, wie einfach es ist und wieviel Spaß es macht Webanwendungen mit Symfony zu entwickeln.

Grundsätzliche Konzepte

Bevor Sie in Symfony einsteigen, sollten Sie einige grundsätzliche Konzepte verstehen. Sie können diesen Abschnitt überspringen, wenn Sie bereits die Bedeutung von OOP, ORM, RAD, DRY, KISS, TDD, YAML und PEAR kennen.

PHP 5

Symfony wurde mit PHP 5 (http://www.php.net/) entwickelt und ist für die Entwicklung von Webanwendungen mit der gleichen Sprache bestimmt. Daher ist ein gutes Grundverständnis von PHP 5 notwendig um das Framework so gut wie möglich zu nutzen.

Entwickler, die bereits PHP 4 kennen, aber nicht PHP 5, sollten sich hauptsächlich auf das neue objektorientierte Modell der Programmiersprache konzentrieren.

Objektorientierte Programmierung (OOP)

Objektorientierte Programmierung (OOP) wird in diesem Kapitel nicht erklärt. Das Thema allein benötigt ein Buch! Weil Symfony umfangreich auf die Objektorientierung von PHP 5 zugreift, ist OOP eine Voraussetzung um die Verwendung von Symfony zu erlernen.

Wikipedia erklärt OOP wie folgt:

Der Grundgedanke hinter objektorientierter Programmierung ist, dass ein Computerprogramm als eine Sammlung von individuellen Einheiten oder Objekten, die aufeinander einwirken, betrachtet wird, im Gegensatz zu einer traditionellen Ansicht, wonach ein Programm als eine Sammlung von Funktionen oder einfach als eine Abfolge von Anweisungen an den Computer gesehen wird.

PHP 5 implementiert die objektorientierten Paradigmen Klasse, Objekt, Methode, Vererbung und viele mehr. Diejenigen, die nicht mit diesen Konzepten vertraut sind, seien auf die entsprechende PHP-Dokumentation verwiesen, die unter http://www.php.net/manual/en/language.oop5.basic.php verfügbar ist.

Magische Methoden

Eine der Stärken von PHPs objektorientieren Fähigkeiten ist die Verwendung von magischen Methoden. Dabei handelt es sich um Methoden, die verwendet werden können um das standardmäßige Verhalten von Klassen zu überschreiben ohne außerhalb befindlichen Quelltext zu ändern. Sie machen die PHP-Syntax kürzer und erweiterbarer. Sie können einfach erkannt werden, da die Namen von magischen Methoden mit zwei Unterstrichen (__) beginnen.

Wenn Sie beispielsweise ein Objekt ausgeben, sucht PHP automatisch nach einer __toString() Methode des Objekts um festzustellen, ob eine spezielle Ausgabe vom Entwickler definiert wurde:

[php]
$myObject = new myClass();
echo $myObject;
// sucht nach einer magischen Methode __toString
echo $myObject->__toString();

Symfony verwendet magische Methoden, Sie sollten somit ein gründliches Verständnis davon besitzen. Die Verwendung der Methoden wird in der PHP-Dokumentation beschrieben (http://www.php.net/manual/en/language.oop5.magic.php).

PHP Extension and Application Repository (PEAR)

PEAR ist "ein Framework und Verteilersystem für wiederverwendbare PHP-Komponenten". PEAR ermöglicht es PHP-Skripte herunterzuladen, zu installieren, zu aktualisieren und zu deinstallieren. Wenn Sie ein PEAR-Skript verwenden, brauchen Sie sich keine Gedanken machen, wo sie das Skript ablegen, wie Sie es verfügbar machen, oder wie Sie das Kommandozeilenprogramm (Command Line Interface, CLI) anpassen.

PEAR ist in PHP geschriebenes Projekt, dass von einer Entwicklergemeinde vorangetrieben und mit PHP standardmäßig ausgeliefert wird.

TIP Die PEAR-Webseite, http://pear.php.net/, bietet nach Kategorien sortierte Pakete und Dokumentationen.

PEAR ist der professionellste Weg Zusatzbibliotheken für PHP zu installieren. Symfony empfiehlt die Verwendung von PEAR um eine zentrale Installation zu erhalten, die für verschiedene Projekte gleichzeitig genutzt werden kann. Die Symfony-Plugins sind PEAR-Pakete mit besonderen Konfigurationen. Symfony selbst ist als PEAR-Paket verfügbar.

Sie müssen nicht alles über die PEAR-Syntax wissen um Symfony verwenden zu können. Sie müssen lediglich seinen Zweck verstehen und es installiert haben. Geben Sie folgenden Befehl auf der Kommandozeile ein um zu überprüfen, ob PEAR installiert ist:

> pear info pear

Dieser Befehl liefert die PEAR-Version als Rückgabewert.

Das Symfony-Projekt hat seine eigenen PEAR-Quellen, "Channel" genannt. Beachten Sie, dass "Channels" erst ab der PEAR-Version 1.4.0 verfügbar sind, Sie sollten also PEAR aktualisieren, sofern Sie eine ältere Version installiert haben. Eine PEAR-Aktualisierung geschieht mit folgendem Befehl:

> pear upgrade PEAR

Object-Relational Mapping (ORM)

Datenbanken sind relational. PHP 5 und Symfony sind objektorientiert. Um die Datenbank objektorientiert anzusprechen, benötigt man eine Schnittstelle um die Objektlogik in die relationale Logik umzuwandeln. Diese Schnittstelle wird Object-Relational Mapping (Abbildung von objektorientierten auf relationale Daten), oder kurz ORM, genannt.

Das ORM besteht aus Objekten, die Zugriff auf Daten gewähren und Geschäftslogik beinhalten.

Ein Vorteil der objekt-relationalen Abstraktionsschicht ist, dass sie verhindert, dass Sie eine datenbankspezifische Syntax verwenden müssen. Die Schicht wandelt Anfragen an die Objekte automatisch in SQL-Anfragen um, die für die verwendete Datenbank optimiert sind.

Das heißt, dass die Umstellung von einem Datenbanksystem zu einem anderen während des Projekts ein Leichtes ist. Stellen Sie sich vor, dass Sie schnell einen Prototypen einer Anwendung entwickeln sollen, der Kunde sich jedoch noch nicht entschieden hat, welches Datenbanksystem am besten seinen Anforderungen entspricht. Sie können beginnen die Anwendung beispielsweise mit SQLite zu entwickeln, und wenn die Entscheidung des Kunden für eine Datenbank gefallen ist, auf MySQL, PostgreSQL, oder Oracle umschwenken. Sie ändern lediglich eine Zeile in der Konfiguration, und es funktioniert.

Eine Abstraktionsschicht kapselt die Datenlogik. Die restliche Anwendung muss nichts über SQL-Abfragen wissen, und das SQL, das auf die Datenbank zugreift, ist leicht zu finden. Entwickler, die auf Datenbankprogrammierung spezialisiert sind, wissen, wo sie anfangen müssen.

Die Verwendung von Objekten statt Datensätzen und Klassen statt Tabellen hat einen weiteren Vorteil: Sie können neue Accessor-Methoden für Ihre Tabellen hinzufügen. Haben Sie beispielsweise eine Tabelle 'Client' mit zwei Feldern, FirstName und LastName, möchten Sie möglicherweise den gesamten Namen Name abrufen. In der objektorientierten Welt ist das Hinzufügen einer neuen Accessor-Methode zur Client-Klasse so leicht:

[php]
public function getName()
{
  return $this->getFirstName().' '.$this->getLastName();
}

Alle wiederkehrenden Datenzugriffsfunktionen und die Geschäftslogik der Daten können innerhalb solcher Objekte konsistent gehalten werden. Stellen Sie sich zum Beispiel eine Klasse ShoppingCart (Einkaufswagen) vor, die Elemente (welche Objekte sind) enthält. Um den gesamten Betrag des Einkaufswagens zu erhalten, können Sie eine 'getTotal()' Methode hinzufügen, wie zum Beispiel folgende:

[php]
public function getTotal()
{
  $total = 0;
  foreach ($this->getItems() as $item)
  {
    $total += $item->getPrice() * $item->getQuantity();
  }
  return $total;
}

Das ist alles. Stellen Sie sich vor, wie lang es gedauert hätte, eine SQL-Abfrage zu schreiben, die das gleiche macht!

Propel, ein weiteres Open Source Projekt, ist momentan eine der besten objekt-relationalen Abstraktionsschichten für PHP 5. Symfony integriert Propel nahtlos in das Framework, daher folgen die meisten im folgenden beschriebenen Datenzugriffe der Propel-Syntax. Das Buch beschreibt, wie die Propel-Objekte verwendet werden, für eine vollständige Referenz ist jedoch die Propel-Webseite (http://propel.phpdb.org/trac/) zu empfehlen.

Rapid Application Development (RAD)

Die Programmierung von Webanwendungen war lange Zeit eine langwierige und langsame Arbeit. Folgt man den gewöhnlichen Software-Engineering-Phasenmodellen (z.B. jenem vom Rational Unified Process), konnte man die Entwicklung der Webanwendung nicht vor einer vollständigen Anforderungsanalyse beginnen, viele Diagramme in Unified Modeling Language (UML) wurden gezeichnet, und Tonnen einleitender Dokumentation wurden erstellt. Dieses Vorgehen war der allgemeinen Entwicklungsgeschwindigkeit und der mangelnden Flexibilität der Programmiersprachen (man musste ein Programm erzeugen, kompilieren, neu starten, und wer weiß was alles noch, ehe man es starten konnte) geschuldet, und am allermeisten der Tatsache, dass Kunden recht vernünftig waren und nicht ständig ihre Meinung änderten.

Heute ändert sich der Markt schneller, und Kunden neigen dazu im Verlauf der Projektentwicklung ihre Ansichten zu ändern. Natürlich erwarten sie, dass das Entwicklerteam sich nach ihren Anforderungen richtet und die Struktur der Anwendung schnell anpasst. Glücklicherweise ermöglicht es die Verwendung von Skriptsprachen wie Perl und PHP, andere Programmieransätze anzuwenden, wie beispielsweise Rapid Application Development (RAD) oder Agile Softwareentwicklung.

Eine der Ideen dieser Programmieransätze ist es, so schnell wie möglich mit der Programmierung zu beginnen, damit der Kunde einen funktionierenden Prototypen prüfen kann und zusätzliche Anweisungen geben kann. Die Anwendung wird dann in einem iterativen Prozess entwickelt und Versionen mit zunehmender Funktionalität in kurzen Entwicklungszyklen erstellt.

Die Folgen für den Entwickler sind vielfältig. Er muss nicht über zukünftige Entwicklungen nachdenken, wenn er eine Funktionalität implementiert. Die verwendete Methode sollte so einfach und geradlinig wie möglich sein. Diese Tatsache wird durch die Maxime des KISS-Prinzips gut verdeutlicht: Keep It Simple, Stupid (Gestalte es einfach, Dummkopf!).

Wenn sich die Anforderungen weiter entwickeln oder wenn eine neue Funktionalität hinzugefügt wird, muss normalerweise vorhandener Quelltext teilweise neu geschrieben werden. Dieser Prozess wird Refactoring genannt und geschieht mehrfach während der Entwicklung einer Webanwendung. Quelltext wird gemäß seiner Funktion an eine andere Stelle verschoben. Doppelt vorkommender Quelltext wird auf ein einmaliges Vorkommen reduziert, so wird das Prinzip Don't Repeat Yourself (DRY) (Wiederhole dich nicht) umgesetzt.

Um sicherzustellen, dass die Anwendung immer noch lauffähig ist, wenn sie beständig geändert wird, wird ein vollständiger Satz Unit Tests benötigt, die automatisiert durchgeführt werden können. Wenn die Tests gut erstellt wurden, sind sie ein zuverlässiges Mittel um zu gewährleisten, dass durch Hinzufügen von Quelltext oder Refactoring die Funktionalität beschädigt wurde. Manche Entwicklungstechniken fordern sogar, Tests zu schreiben, bevor Quelltext erstellt wird--dieses Vorgehen wird test-driven development (TDD) (testgesteuerte Programmierung) genannt.

NOTE Es gibt viele weitere Softwareentwicklungsprinzipien und gute Angewohnheiten im Zusammenhang mit Agile Development. Einer der effektivsten Ansätze des Agile Development heißt Extreme Programming (abgekürzt mit XP). Die Literatur zu XP wird Ihnen viele Informationen bieten, wie Sie eine Anwendung schnell und effektiv entwickeln. Ein guter Anfang sind die Bücher der XP Serie von Kent Beck (Addison-Wesley).

Symfony ist das perfekte Werkzeug für RAD. In der Tat wurde das Framework von einer Internetagentur entwickelt, die das RAD-Prinzip für ihre eigenen Projekte verwendete. Das heißt, dass das Lernen der Benutzung von Symfony nicht das Lernen einer neuen Programmiersprache ist, sondern eher das Lernen der Anwendung der richtigen Schritte und richtigen Entscheidungen, um Anwendungen auf effektivere Art und Weise zu entwickeln.

Die Webseite des Symfony-Projekts bietet eine schrittweise Anleitung, die die Entwicklung einer Anwendung basierend auf agilen Entwicklungsansätzen erläutert. Die entwickelte Anwendung heißt Askeet (http://www.symfony-project.com/askeet). Jedem, der mehr über Agile Development erfahren will, kann die Anleitung nur empfohlen werden.

YAML

Laut der offiziellen YAML-Webseite (http://www.yaml.org/) handelt es sich bei YAML um ein einfaches maschinenlesbares Serialisierungsformat, dass auf Lesbarkeit und Interaktion mit Skriptsprachen ausgelegt ist. Mit anderen Worten, YAML ist eine sehr einfache Auszeichnungssprache, um Daten in einer XML-ähnlichen Weise zu beschreiben, aber mit viel leichterer Syntax. YAML ist besonders hilfreich für Daten, die in Arrays und Hashes übersetzt werden können, wie folgende:

[php]
$house = array(
  'family' => array(
    'name'     => 'Doe',
    'parents'  => array('John', 'Jane'),
    'children' => array('Paul', 'Mark', 'Simone')
  ),
  'address' => array(
    'number'   => 34,
    'street'   => 'Main Street',
    'city'     => 'Nowheretown',
    'zipcode'  => '12345'
  )
);

Dieses PHP-Array kann automatisch erzeugt werden, wenn der folgende YAML-String geparsed wird:

house:
  family:
    name:     Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

In YAML wird Struktur durch Einrückung verdeutlicht, aufgezählte Elemente werden durch einen Bindestrich angezeigt, Schlüssel-Wert-Paare sind durch einen Doppelpunkt getrennt. YAML bietet auch eine Kurzsyntax, um die gleiche Struktur in weniger Zeilen darzustellen, wobei Arrays explizit mit '[]' und Hashes mit '{}' hervorgehoben werden. Somit könnten die oben gezeigten Daten wie folgt in Kurzform geschrieben werden:

house:
  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }

YAML ist ein Acronym für Yet Another Markup Language (noch eine weitere Auszeichnungssprache) und wird "yamel" ausgesprochen. Das Format existiert seit etwa 2001, und YAML-Parser existieren für eine Vielzahl von Programmiersprachen.

TIP Die Spezifikationen des YAML-Formats sind unter http://www.yaml.org/ verfügbar.

Wie Sie sehen, sind YAML-Daten schneller zu schreiben als XML (keine schließenden Tags oder explizite Anführungszeichen), und sie sind leistungsfähiger als '.ini' Dateien (die keine hierarchischen Daten unterstützen). Deshalb verwendet Symfony YAML als die bevorzugte Sprache, um Konfigurationen zu speichern. Sie werden viele YAML-Dateien in diesem Buch sehen, aber sie sind so einfach, dass Sie wahrscheinlich nicht mehr darüber erfahren müssen.

Zusammenfassung

Symfony ist ein PHP 5 Framework für Webanwendungen. Es fügt eine neue Schicht über der Skriptsprache PHP ein, um Werkzeuge bereitzustellen, die die Entwicklung von komplexen Webanwendungen beschleunigen. Dieses Buch wird alles über das Framework sagen, Sie müssen lediglich mit den grundlegenden Konzepten moderner Programmierung vertraut sein um es zu verstehen--und zwar der objektorientierten Programmierung (OOP), der Abbildung von objektorientierten Daten auf relationale Daten (ORM) und Rapid Application Development (RAD). Der einzige notwendige technische Hintergrund ist Wissen zu PHP 5.