Development

Documentation/de_DE/book/1.0/01-Introducing-Symfony (diff)

You must first sign up to be able to contribute.

Changes from Version 1 of Documentation/de_DE/book/1.0/01-Introducing-Symfony

Show
Ignore:
Author:
Erik.Dahne (IP: 88.134.24.71)
Timestamp:
06/03/07 14:03:35 (11 years ago)
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/de_DE/book/1.0/01-Introducing-Symfony

    v0 v1  
     1{{{ 
     2#!WikiMarkdown 
     3Kapitel 1 - Einführung in Symfony 
     4=============================== 
     5 
     6Was kann Symfony? Was ist erforderlich um es zu nutzen? Diese Kapitel wird diese Fragen beantworten. 
     7 
     8Symfony in Kürze 
     9---------------- 
     10 
     11Ein 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. 
     12 
     13Symfony 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! 
     14 
     15Symfony 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. 
     16 
     17### Symfonys Fähigkeiten 
     18 
     19Symfony wurde unter der Maßgabe entwickelt die folgenden Anforderungen zu erfüllen: 
     20 
     21  * einfache Installation und Konfiguration auf den meisten Systemen (garantierte Lauffähigkeit auf *nix und Windows)   
     22  * Datenbankunabhängigkeit 
     23  * in den meisten Fällen einfache Verwendbarkeit, aber dennoch flexibel genug um sich komplexen Anwendungsfällen anzupassen 
     24  * basierend auf der Prämisse Gewohnheit geht vor Konfiguration--der Entwickler muss lediglich die ungewöhnlichen Dinge konfigurieren 
     25  * konform mit den meisten optimalen Verfahren und Anwendungsmustern der Webanwendungsentwicklung 
     26  * bereit für den Unternehmenseinsatz--anpassungsfähig an bestehende Grundsätze und Architekturen der Informationstechnologie (IT), und beständig genug für langfristige Projekte 
     27  * sehr lesbarer Code mit phpDocumentor-Kommentaren zur Erleichterung der Wartung 
     28  * einfache Erweiterbarkeit, die das Einbinden weiterer Bibliotheken problemlos ermöglicht 
     29 
     30#### Automatisierte Funktionen für Webprojekte 
     31 
     32Die meisten gebräuchlichen Funktionen von Webprojekten sind in Symfony automatisiert worden, und zwar folgende: 
     33 
     34  * Die enthaltene Internationalisierung erlaubt sowohl für Daten als auch für Bedienoberflächen Übersetzungen sowie Lokalisierungen. 
     35  * 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. 
     36  * 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. 
     37  * Das Escapen von Ausgaben schützt die Anwendung vor Attacken mittels fehlerhafter Daten. 
     38  * Das Cache-Management reduziert die Bandbreitennutzung und die Serverauslastung. 
     39  * Authentifikation und Berechtigungen vereinfachen das Anlegen von eingeschränkt nutzbaren Bereichen sowie das Benutzermanagement. 
     40  * Das Routing und elegante URLs beziehen die Adresse in die Benutzeroberfläche mit ein und sorgen für suchmaschinenfreundliche URLs. 
     41  * Die eingebaute E-Mail-Funktionalität und das API ermöglicht Webanwendungen Interaktionen, die über die klassische Browserkommunikation hinaus gehen. 
     42  * Listen sind dank automatischer Seitenaufteilung, Sortierung und Filtern viel benutzerfreundlicher. 
     43  * Factories, Plugins und Kombinationen der beiden Möglichkeiten sorgen für eine hohe Erweiterbarkeit. 
     44  * Ajax Interaktionen können aufgrund einzeiliger Helfer, hinter denen sich plattformübergreifend kompatibles Javascript verbirgt, schnell implementiert werden. 
     45 
     46#### Entwicklungsumgebung und Tools 
     47 
     48Um 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: 
     49 
     50  * Die Codeerzeugungswerkzeuge sind hilfreich für das Prototyping und Ein-Klick-Administrationsoberflächen.   
     51  * Das enthaltene Framework für funktionale und Unit-Tests bietet die perfekten Werkzeuge für die testgestützte Entwicklung. 
     52  * Die Debug-Oberfläche beschleunigt die Fehlersuche, da sie alle Informationen der aktuellen Seite darstellt, die ein Entwickler benötigt. 
     53  * Über die Kommandozeile kann die Anwendungsauslieferung auf einen Server automatisiert werden. 
     54  * Konfigurationsänderungen im laufenden System sind möglich und wirksam. 
     55  * Die Protokollierung gibt Administratoren detaillierten Aufschluss über die Anwendungsabläufe.   
     56 
     57### Wer hat Symfony entwickelt und warum? 
     58 
     59Die 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/](http://www.sensio.com/)), einer französischen Internetagentur, die für ihre innovativen Ansichten im Bereich Web Development bekannt ist. 
     60 
     61Im 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. 
     62 
     63Fabien 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. 
     64 
     65Nach 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. 
     66 
     67>**Note** 
     68>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". 
     69 
     70Damit 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. 
     71 
     72### Die Symfony-Community 
     73 
     74Sowie die Symfony-Website ([http://www.symfony-project.com/](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. 
     75 
     76Frameworks 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.  
     77 
     78Das ö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. 
     79 
     80Heutzutage 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. 
     81 
     82Die Symfony-Community ist die dritte Kraft des Framworks, und wir hoffen, dass Sie nach dem Lesen dieses Buchs beitreten. 
     83 
     84### Ist Symfony für mich geeignet? 
     85 
     86Ob 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. 
     87 
     88Wenn 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. 
     89 
     90Wenn 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. 
     91 
     92Und 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. 
     93 
     94>**TIP** 
     95>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. 
     96 
     97Grundsätzliche Konzepte 
     98-------------------- 
     99 
     100Bevor 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. 
     101 
     102### PHP 5 
     103 
     104Symfony wurde mit PHP 5 ([http://www.php.net/](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. 
     105 
     106Entwickler, die bereits PHP 4 kennen, aber nicht PHP 5, sollten sich hauptsächlich auf das neue objektorientierte Modell der Programmiersprache konzentrieren. 
     107 
     108### Objektorientierte Programmierung (OOP) 
     109 
     110Objektorientierte 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. 
     111 
     112Wikipedia erklärt OOP wie folgt: 
     113 
     114Der 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. 
     115 
     116PHP 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](http://www.php.net/manual/en/language.oop5.basic.php) verfügbar ist. 
     117 
     118### Magische Methoden 
     119 
     120Eine 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. 
     121 
     122Wenn Sie beispielsweise ein Objekt ausgeben, sucht PHP automatisch nach einer `__toString()` Methode des Objekts um festzustellen, ob eine spezielle Ausgabe vom Entwickler definiert wurde: 
     123 
     124    [php] 
     125    $myObject = new myClass(); 
     126    echo $myObject; 
     127    // sucht nach einer magischen Methode __toString 
     128    echo $myObject->__toString(); 
     129 
     130Symfony 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](http://www.php.net/manual/en/language.oop5.magic.php)). 
     131         
     132### PHP Extension and Application Repository (PEAR) 
     133 
     134PEAR 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. 
     135 
     136PEAR ist in PHP geschriebenes Projekt, dass von einer Entwicklergemeinde vorangetrieben und mit PHP standardmäßig ausgeliefert wird. 
     137 
     138 
     139>**TIP** 
     140>Die PEAR-Webseite, [http://pear.php.net/](http://pear.php.net/), bietet nach Kategorien sortierte Pakete und Dokumentationen. 
     141 
     142PEAR 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. 
     143 
     144Sie 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: 
     145 
     146    > pear info pear 
     147 
     148Dieser Befehl liefert die PEAR-Version als Rückgabewert. 
     149 
     150Das 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: 
     151 
     152    > pear upgrade PEAR 
     153 
     154### Object-Relational Mapping (ORM) 
     155 
     156Datenbanken 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. 
     157 
     158Das ORM besteht aus Objekten, die Zugriff auf Daten gewähren und Geschäftslogik beinhalten. 
     159 
     160Ein 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. 
     161 
     162Das 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. 
     163 
     164Eine 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. 
     165 
     166Die 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: 
     167 
     168    [php] 
     169    public function getName() 
     170    { 
     171      return $this->getFirstName().' '.$this->getLastName(); 
     172    } 
     173 
     174Alle 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: 
     175         
     176    [php] 
     177    public function getTotal() 
     178    { 
     179      $total = 0; 
     180      foreach ($this->getItems() as $item) 
     181      { 
     182        $total += $item->getPrice() * $item->getQuantity(); 
     183      } 
     184      return $total; 
     185    } 
     186 
     187Das ist alles. Stellen Sie sich vor, wie lang es gedauert hätte, eine SQL-Abfrage zu schreiben, die das gleiche macht!   
     188 
     189Propel, 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/](http://propel.phpdb.org/trac/)) zu empfehlen. 
     190 
     191### Rapid Application Development (RAD) 
     192 
     193Die 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. 
     194 
     195Heute ä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. 
     196 
     197Eine 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. 
     198 
     199Die 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!). 
     200 
     201Wenn 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. 
     202 
     203Um 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. 
     204 
     205>**NOTE** 
     206>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). 
     207 
     208Symfony 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. 
     209 
     210Die 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](http://www.symfony-project.com/askeet)). Jedem, der mehr über Agile Development erfahren will, kann die Anleitung nur empfohlen werden. 
     211 
     212### YAML 
     213 
     214Laut der offiziellen YAML-Webseite ([http://www.yaml.org/](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: 
     215 
     216    [php] 
     217    $house = array( 
     218      'family' => array( 
     219        'name'     => 'Doe', 
     220        'parents'  => array('John', 'Jane'), 
     221        'children' => array('Paul', 'Mark', 'Simone') 
     222      ), 
     223      'address' => array( 
     224        'number'   => 34, 
     225        'street'   => 'Main Street', 
     226        'city'     => 'Nowheretown', 
     227        'zipcode'  => '12345' 
     228      ) 
     229    ); 
     230 
     231Dieses PHP-Array kann automatisch erzeugt werden, wenn der folgende YAML-String geparsed wird:   
     232 
     233    house: 
     234      family: 
     235        name:     Doe 
     236        parents: 
     237          - John 
     238          - Jane 
     239        children: 
     240          - Paul 
     241          - Mark 
     242          - Simone 
     243      address: 
     244        number: 34 
     245        street: Main Street 
     246        city: Nowheretown 
     247        zipcode: 12345 
     248 
     249In 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: 
     250                 
     251    house: 
     252      family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] } 
     253      address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 } 
     254 
     255YAML 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. 
     256           
     257>**TIP** 
     258>Die Spezifikationen des YAML-Formats sind unter [http://www.yaml.org/](http://www.yaml.org/) verfügbar. 
     259 
     260Wie 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. 
     261 
     262Zusammenfassung 
     263------- 
     264 
     265Symfony 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. 
     266}}}