You are on page 1of 37

Bakkalaureatsarbeit

Evaluierung von PHP Frameworks
Christoph Lipautz
————————————–

Technische Universitat Graz ¨

Graz University of Technology

Eidesstattliche Erkl¨rung a
Ich erkl¨re an Eides statt, dass ich die vorliegende Arbeit selbstst¨ndig verfasst, andere a a als die angegebenen Quellen/Hilfsmittel nicht benutzt und die den benutzten Quellen w¨rtlich und inhaltlich entnommenen Stellen als solche kenntlich gemacht habe. o

Graz, am 28. November 2010 Unterschrift

ii

Kurzfassung
Die Wahl einer geeigneten Entwicklungsumgebung ist der Grundstein f¨r u die erfolgreiche Umsetzung eines Webprojektes. Aus der verbreiteten freien Skriptsprache PHP haben sich eine Reihe von Software Frameworks entwickelt. Diese unterscheiden sich in ihrem Aufbau sowie ihrer Verwendung. Abh¨ngig von der Spezifikation eines Projektes soll ein geeignetes PHP a ¨ Framework gefunden werden. Diese Arbeit gibt eine Ubersicht moderner Frameworks, aktueller Konzepte und einigen Vorz¨ge in deren Verwendung. u Im Detail werden drei PHP Frameworks betrachtet, eine Gegen¨berstellung u durchgef¨hrt und Unterschiede aufgezeigt. u

iii

Abstract
Choosing an appropriate environment bases a successful implementation of a web project. From the popular free available script language PHP, a number of software frameworks have been developed. These differ in their construction and use. Depending on the specification of a project, an appropriate PHP Framework has to be found. This work provides an overview of modern frameworks, current approaches and some advantages in their useage. In detail, three PHP frameworks are considered and compared as well as main differences pointed out.

iv

Inhaltsverzeichnis
1 Einf¨hrung u 1.1 1.2 1.3 1.4 1.5 1.6 Ausgangssituation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Skriptsprache PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . Zielsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Warum ein PHP Framework verwenden? . . . . . . . . . . . . . . . . . Was erwarte ich mir von einem PHP Framework . . . . . . . . . . . . . 1 1 2 2 3 3 4 8 8 8 9 10 10 11 12 12 12 13 13 13 14 14 15 15 15 16 16 17 18 18

2 Grundlegende Konzepte 2.1 2.2 2.3 MVC Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CRUD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datenstrukturen 2.3.1 2.3.2 2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Object-Relational-Mapping . . . . . . . . . . . . . . . . . . . . Active Record Pattern . . . . . . . . . . . . . . . . . . . . . . .

RAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

¨ 3 Ubersicht von bekannten PHP Frameworks 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 Adventure PHP Framework (APF) . . . . . . . . . . . . . . . . . . . . Akelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CakePHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Codeigniter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eZ Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PHPDevShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Seagull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . symfony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.10 Trax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.11 Yii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.12 Zend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.13 Zoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Yii, symfony und das Zend Framework 4.1 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

v

4.1.1 4.1.2 4.2 4.3 4.4 4.2.1 4.3.1 4.4.1 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6

Beispielcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . Formular und Formularvalidierung . . . . . . . . . . . . . . . . Internationalisierung und Lokalisierung . . . . . . . . . . . . . . Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . .

19 20 20 21 21 22 22 22 23 23 24 26 26 28 30

View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Komponenten eines Framework . . . . . . . . . . . . . . . . . . . . . .

5 Zusammenfassung und Ausblick 6 Anhang A - Entscheidungsmatrix

vi

1 Einfuhrung ¨
1.1 Ausgangssituation
Das World Wide Web beschr¨nkt sich nicht nur auf die Darstellung einfacher statia scher Seiten die untereinander verlinkt sind, sondern dient auch als Oberfl¨che f¨r a u verteilte Programme, den Webanwendungen. Durch die steigende Komplexit¨t dieser a Anwendungen definiert sich die Notwendigkeit von performanter, stabiler und flexibler Software. Die Entwicklung immer leistungsf¨higerer Hardware, nach dem Gesetz von a Moore, erm¨glicht schnellere Server sowie Internetverbindungen. Dies f¨hrte wiederum o u zur M¨glichkeit, anspruchsvolle Applikationen innerhalb des Web zu betreiben. Was o fr¨her in einfachen, verteilten, meist voneinander unabh¨ngigen Skripten ausgef¨hrt u a u wurde, wird heute in großen Softwaresystemen verarbeitet. Die Verwendung solcher Softwaresysteme erm¨glicht die Darstellung von dynamischen Inhalten. Es entstehen o durchaus große Datensammlungen, die in geeigneter Form verarbeitet und abgebildet werden m¨ssen. Vermehrt gewinnt die Interaktion des Benutzers mit diesen Anwendunu gen an Bedeutung. Weiters werden Desktop-Anwendungen zur Verwendung in einen Internetbrowser portiert. Bei der Ausf¨hrung der Software in einer Webumgebung unterscheidet man zwischen u Server- und Client-seitiger Abarbeitung. In einer Server-seitigen Anwendung erfolgt die Ausf¨hrung vollst¨ndig auf dem entfernten Server, wohingegen eine Client-seitige Abu a arbeitung direkt auf Rechner des Nutzers erfolgt. Diese Arbeit konzentriert sich auf die freie Skriptsprache PHP: Hypertext Preprocessor, welche am Server ausgef¨hrt wird. u Sie w¨chst stetig in ihrem Funktionsumfang und bietet neue Konzepte. Durch die a fortlaufende Weiterentwicklung hat sich PHP etabliert und sich gegen¨ber anderen u Skriptsprachen wie zum Beispiel Perl durchgesetzt. Durch abgegrenzte M¨glichkeio ten des World Wide Web, bzw. des HTTP-Protokolls, gibt es Einschr¨nkungen von a L¨sungswegen von Problemen. Dies f¨hrt wiederum dazu, dass eine konkrete L¨sung o u o h¨ufig in vielen Variationen, mit leichten Unterschieden vorliegt. Es ist naheliegend, a eine allgemein ausreichende und passende L¨sung zu verwenden, gegebenenfalls zu ado aptieren und das sprichw¨rtliche Rad nicht neu zu erfinden. “Wiederverwendbarkeit ist o ein alter Traum der Softwaretechnik. Wo sie funktioniert, schafft sie bessere Qualit¨t a in k¨rzerer Zeit.” [Sch07] u

1

1.2 Die Skriptsprache PHP
Die im Jahre 1995 ins Leben gerufene, frei zug¨ngliche Skriptsprache PHP, ist aktuell a mit Version 5.3 verf¨gbar. Urspr¨nglich wurde die bis heute in der Programmieru u sprache C verfasste Skriptsprache von Rasmus Lerdorf entwickelt, um eine Sammlung von Skripten der Programmiersprache Perl, bei welcher es sich ebenfalls um eine frei zug¨ngliche Skriptsprache handelt, zu ersetzen[WiP10]. Die Softwareentwickler Andi a Gutman und Zeev Suraski entwickelten mit dieser Basis die Version PHP3, welche erstmals eine st¨rkere Verbreitung erfuhr. Aus diesem Fortschritt heraus gr¨ndeten a u Gutman und Suraski die Firma Zend Technologies Ltd., die bis heute f¨hrend hinter u der Entwicklung von PHP steht. Der Name leitet sich aus den beiden Gr¨ndervornau men Zeev und And i ab. Mit PHP Version 4 wurde die Skriptsprache Perl endg¨ltig u in der Verbreitung im Bereich der Programmierung von dynamischen Webseiten uber¨ holt. Hierzu f¨hrte vor allem der schnellerer Einstieg in die Programmierung mit PHP u gegen¨ber Perl. Mit Sommer 2004 wurde, mit verbesserter Unterst¨tzung von objeku u torientierten Konzepten, die Version 5 ver¨ffentlicht. Da die verschiedenen Versionen o von PHP große Unterschiede aufweisen, ist es ublich, die zugeh¨rige Hauptversionso ¨ nummer der Bezeichnung PHP anzuh¨ngen. Die Einfachheit der Sprache verspricht a vor allem unerfahrenen Entwicklern schnelle Ergebnisse in einer Umsetzung. Konzepte wie eine schwache Typisierung vereinfachen die schnelle Erzeugung kleiner Anwendungen. In großen Systemen kann die nachl¨ssige Verwendung von Typen eine potentielle a Fehlerquelle sein. Beispielhaft wird dies in Listing 1 dargestellt.
1 2 3 4 5

<?php var dump ( 0 == n u l l , // b o o l ( t r u e ) // b o o l ( t r u e ) // b o o l ( f a l s e ) ’ 0 ’ == 0 , ’ 0 ’ == n u l l );

Listing 1: schwache Typisierung in PHP

1.3 Entwicklungsumgebung
Eine typische Umgebung f¨r PHP Anwendungen ist das Betriebssystem Linux, ein u Apache Webserver und eine MySQL Datenbank. Auch wenn viele PHP Frameworks versprechen, dass sie unter verschiedenen Umgebungen fehlerfrei ausf¨hrbar sind, wuru

2

de in dieser Arbeit explizit die bereits angesprochene Konstellation von Linux, Apache und MySQL ber¨cksichtigt. Die Irrelevanz welches dieser Programme verwendet wird, u zeigt sich darin, dass die Framworks keine Abh¨ngigkeiten hierzu vorweisen. Im Weitea ren f¨llt die Entscheidung zu dieser Zusammenstellung, da sie wie auch PHP und alle a betrachteten Frameworks aus quelloffener Software besteht. Unterschiede f¨r den Entu wickler sind ebenfalls nicht gegeben, da PHP keine vom Betriebssystem oder Webserver abh¨ngigen Eigenheiten aufweist. a

1.4 Zielsetzung
Die Zielsetzung eines Softwareentwicklers ist es, Ergebnisse zu optimieren. Dies erreicht man mit effizienter und schneller Entwicklung kombiniert mit einem performanten und stabilen Ergebnis. Diese Arbeit setzt sich zum Ziel, die Vorz¨ge von PHP Frameworks u ¨ aufzuzeigen und einen Uberblick uber aktuell relevante PHP Frameworks zu schaffen. ¨ Zu jedem der gew¨hlten Frameworks ist eine Kurzbeschreibung der Besonderheiten a verfasst, wobei drei ausgew¨hlte Frameworks unter Kapitel 4 im Detail betrachtet a werden. Es handelt sich hierbei um symfony, Yii und das Zend Framework. Um priorisiert und gewichtet Kriterien zu einer Projektumsetzung mit Hilfe eines der drei gew¨hlten Frameworks darzustellen, findet sich am Ende dieser Arbeit eine Entscheia dungshilfe in Form einer Entscheidungsmatrix. Mit dem Gedanken f¨r jede Aufgabe u das richtige Werkzeug zu finden, kann mit einer Projektspezifikation ein Framework gew¨hlt werden. a

1.5 Warum ein PHP Framework verwenden?
“The idea behind a framework is to offer a design you can use across multiple applications. All applications have a number of basic things in common. A framework is designed to provide a structure for those common elements (database interaction, presentation layer, application logic) so you spend less time writing up database interface code or presentation-layer interfaces and more time writing the application itself.” [IBM10] Das Prinzip der Wiederverwendbarkeit von Software ist eines der wesentlichen Kriterien. In [oEE90] ist dies wie folgt definiert. “reusability. The degree to which a software module or other work product can be used in more than one computer pro-

3

gram or software system.” Vor allem im wirtschaftlichen Sinne ist dies erstrebenswert, da somit ein weitaus effizienteres und ¨konomisches Arbeiten erm¨glicht wird. o o Neben einer Software Bibliothek, welche eine konkrete Funktion verfolgt, gibt es Software Frameworks, die eher allgemeine Funktionalit¨t abdecken. “Das Framework als a Hauptprogramm ist der Rahmen. Es stellt Schnittstellen bereit, in die Benutzer ihre eigenen Codeteile einh¨ngen k¨nnen. Das Framework wird gestartet und kann die india o viduellen Aspekte aufrufen. Ein Anwendungsprogramm, das eine Bibliothek nutzt, ruft diese auf. Frameworks dagegen drehen den Spieß um und rufen ihrerseits die Codeteile auf, die anwendungsspezifisch sind.” [Sch07] Weiters unterst¨tzt die Verwendung den u Entwickler durch eine vorgegebene Struktur und hilft ihm dabei, definierte Standards einzuhalten. Durch diese Vorgabe kann ein weiterer Entwickler, der mit dem Frame¨ work vertraut ist, die Umsetzung schneller verstehen und Anderungen selbstst¨ndig a ohne weitere Einschulung durchf¨hren. Von der Erfahrung langj¨hriger PHP Entwicku a ler k¨nnen unerfahrene Programmierer profitieren. Sie arbeiten in einer strukturierten o Umgebung, lernen aus Beispielen und m¨ssen nicht erst selbst eine Basis f¨r Projekte u u schaffen. Um wiederkehrende Aufgabenstellungen mit vorgefertigten L¨sungen zu vero wenden, folgt ein Framework dem Prinzip der Erweiterbarkeit. Die Realisierung erfolgt uber Erweiterungen als Module, Extensions oder Plugins. Im Wesentlichen verfolgen ¨ diese dasselbe Ziel, indem sie eine Funktionalit¨t implementieren, die ein konkretes a Problem verarbeitet. Erweiterungen werden meist nicht von den Frameworkentwicklern selbst entwickelt, sondern von einem mit der Funktionalit¨t vertrauten Programa mierer. Dadurch profitiert “das Framework” vom Spezialwissen der Community.

1.6 Was erwarte ich mir von einem PHP Framework
Da ein Framework selbst die Basis einer Software darstellt, muss diese erh¨hten Anforo derungen gerecht werden. Ein PHP Framework sollte nachfolgende Kriterien erf¨llen. u • Qualit¨t, Stabilit¨t und Sicherheit - Da die zu entwickelnde Software auf einem a a Framework beruht, sind Qualit¨t, Sicherheit und Stabilit¨t drei der wichtigsten a a Kriterien. Ein umfangreiches und m¨glichst vollst¨ndiges Testframework sollo a te dem Kern des PHP Framework selbst angef¨gt sein, um Entwicklungsfehler u m¨glichst fr¨h und m¨glichst schnell bestimmen zu k¨nnen. Sicherheitsl¨cken o u o o u in der Kernsoftware bedeuten ein hohes Risiko. Erfahrene Internetuser k¨nnen o das Framework vieler Webseiten durch ihre wesentlichen Merkmale bestimmen.

4

¨ Wenn bereits Sicherheitsl¨cken der Offentlichkeit bekannt sind, besteht die Geu fahr, dass einer dieser kundigen Besucher diese L¨cke missbraucht. Durch eine u große Anzahl von Benutzern und einer weitl¨ufigen Verbreitung werden Fehler im a Kernsystem eher gefunden, somit tr¨gt auch dies maßgeblich zur Verbesserung a eines Frameworks bei. Nat¨rlich soll auch die am Framework entwickelte Softu ware gepr¨ft werden, sofern die geeigneten Tools hierf¨r zur Verf¨gung stehen. u u u “quality. The degree to which a system component, or process meets specified requirements.” [oEE90] • Performance - Das Framework sollte die eigentliche Anwendung nicht merkbar beeinflussen, durch den großen Funktionsumfang ist dies aber nur schwer durchf¨hrbar. Neben der Optimierung des Kernquellcodes sind Caching Mechau nismen unabdingbar. Diese sind eine g¨nstige Alternative zum Hardwareupgrade u des verwendeten Webservers um eine Leistungssteigerung durchzuf¨hren. Hierbei u gibt es diverse Vorgehensweisen wie das Zusammenfassen von Quellcode Dateien oder das Zwischenspeichern von statischen Inhalten. Außerdem gibt es eine Reihe von Erweiterungen f¨r PHP selbst, die automatisiert auf PHP angewendet u werden k¨nnen. Unter die bekanntesten z¨hlen hier der Alternative PHP Cache, o a kurz APC, Memcache, XCache und der eAccelerator von Zend. “performance. The degree to which a system or component accomplishes its designated functions within given constraints, such as speed, accuracy, or memory usage.” [oEE90] • Aktualit¨t/Weiterentwicklung - Die Webentwicklung erweist sich als sehr schnella lebig. F¨r Frameworkentwickler ist es notwendig, f¨r neue M¨glichkeiten offen u u o zu sein und Trends zu verfolgen. Umstellungen im Framework, z.B. der Wechsel einer im Kern integrierten Library, sollten erfolgen, wenn dies Verbesserungen schafft. Wie bereits in Kapitel 1.2 erw¨hnt wurde, sind erst mit PHP5 wichtige a Konzepte der objektorientierten Programmierung in die Sprache aufgenommen worden. In einigen PHP Frameworks wird eine Abw¨rtskompatibilit¨t zu PHP4 a a beworben, da die Software auf Webservern mit PHP4 wie auch PHP5 verwendet werden k¨nnen. Diese Kompatibilit¨t kann nat¨rlich nur erreicht werden, indem o a u auf PHP5 verzichtet wird. Implizit sind dadurch nat¨rlich keine der Vorz¨ge von u u PHP5, innerhalb des Quellcode des Framework, enthalten. Dar¨ber hinaus kann u ¨ man eine v¨llige Uberarbeitung oder sogar eine Einstellung der Weiterentwicko lung erwarten.

5

• Funktionsumfang - Angebotene Funktionalit¨t ist nur sinnvoll, solange diese alla gemeine Aufgaben erf¨llt und keine Spezialf¨lle abdeckt. Die Abgrenzung und u a bedachte Auswahl stellt einen erh¨hten Stellenwert dar, da mehr Quellcode auch o zugleich Performance- und Qualit¨tsverlust mit sich bringt. Anders betrachtet, a ist es nat¨rlich nicht sinnvoll, jede Aufgabe in Erweiterungen anzubieten. Kernu funktionalit¨t ist klar erkennbar, sobald viele Erweiterungen h¨ufige Abh¨ngiga a a keiten dazu entwickeln. • Erweiterung - Entsteht ein St¨ck Code, welches man gut in weiteren Projekten u wiederverwenden kann, so ist es notwendig, dies vom restlichen Code zu l¨sen. o Hierf¨r werden innerhalb von Frameworks Erweiterungen angeboten. Bezeichnet u werden diese als Module, Extensions oder Plugins. Dadurch entsteht eine Erweiterbarkeit durch Dritte, eine durch die Community verfasste Ausweitung der Funktionalit¨t. Die Erweiterungen stellen eine M¨glichkeit dar, unabh¨ngig von a o a der Kernsoftware neue L¨sungen f¨r diverse Aufgaben zu schaffen. “extendao u bility. The ease with which a system or component can be modified to increase its storage or functional capacity.” [oEE90] • Unabh¨ngigkeit/Flexibilit¨t - Uber PHP hinaus muss das Framework eine Schnitta a ¨ stelle zu den weiteren Komponenten einer Webapplikation liefern. Die wichtigsten sind hierbei Schnittstellen zu Datenbank, Javascript- und Template-Integration. Seit Einf¨hrung von PDO, den PHP Data Objects, ist es wesentlich einfacher u geworden, die h¨ufigsten Datenbanken zur freien Auswahl in einer Applikaa tion anzubieten. “PDO aims to supply an uniformed API of common functions for most relational databases. This greatly simplifies the PHP process (through the package differences in a common API to support different database) development.”[CHLJ09] Wie in PHP gibt es auch in Javascript Frameworks, die Webanwendung einfach integriert werden k¨nnen. Eine Auswahl, welches Jao vascript Framework dies ist, sollte dem Entwickler freigestellt sein. “flexibility. The ease with which a system or component can be modified for use in applications or environments other than those for which it was specifically designed.” [oEE90] • Dokumentation - Der erste Einstieg in das Framework sollte vor allem schnell ¨ funktionieren und es sollte m¨glich sein, sich leicht eine Ubersicht schaffen zu o

6

k¨nnen. Nur so kann man vorweg schon entscheiden, ob denn auch die richtige o Wahl getroffen wurde. Hierbei helfen oft verwendete Kurzanleitungen f¨r kleine u Webprojekte wie die Erstellung einer einfachen Blog Anwendung. Ist der erste Schritt einmal gewagt, liegt ein hoher Stellenwert auf Umfang und Vollst¨ndiga ¨ keit der Dokumentation. Ahnlich einer FAQ Liste werden oft Sammlungen von Tutorial oder How-To, f¨r Aufgaben, die wiederholt auftreten, erstellt. Innerhalb u von Dokumentationen werden diese als Cookbook bezeichnet, da die Analogie zu einer Rezeptsammlung erkennbar ist.

7

2 Grundlegende Konzepte
2.1 MVC Modell
“As a design pattern, MVC is common to split an application into separate layers that can be analyzed, and sometimes implemented, separately. By decoupling models and views, MVC helps to reduce the complexity in architectural design and to increase flexibility and reuse of code.” [CHLJ09] Das Model-View-Controller Modell beschreibt die strikte Trennung von Daten, Logik und Darstellung. Die Eigenschaft der Abtrennung dieser Bereiche kann man sich zu Nutzen machen, indem Datenbank-, PHP- und Layoutentwickler im Idealfall parallel zueinander die Umsetzungen durchf¨hren. Diese u strikte Trennung gibt einerseits einen variablen, doch andererseits auch sehr vorgegebenen Aufbau einer Applikation vor. Intuitiv f¨llt die Entscheidung, welchen Platz a eine beispielhafte Prozesslogik einnehmen muss. Abbildung 1 zeigt den Aufbau und Verlauf eines HTTP-Request in einem MVC Modell. Die Kernlogik des Framework entscheidet, welcher Controller zu w¨hlen ist und weist diesem die Anfrage zu. Jeder a Controller verf¨gt uber eine Reihe von Actions, eine die der Anfrage entsprechenden, u ¨ wird gew¨hlt und ausgef¨hrt. In diesem Bereich erzeugt der Controller bei Bedarf eine a u Verbindung zum Model, speichert oder fragt Daten ab. Der Controller w¨hlt abh¨ngig a a vom Verlauf seiner Abarbeitung einen View, ubergibt diesem etwaige Daten und f¨hrt u ¨ diesen aus.

2.2 CRUD
Es gibt vier Aktionen, die in Bezug auf ein Model ausgef¨hrt werden k¨nnen: das Model u o zu erstellen, Informationen zu lesen, das Model zu ver¨ndern und es zu l¨schen. Man a o spricht von einem CRUD Modell. CRUD steht f¨r Create, Read, Update und Delete, u was auch den grundlegenden Datenbankoperationen entspricht. Typischerweise findet dieses Modell Einzug bei automatischer Code Generierung. Erzeugt wird ein Model mit den zur Kommunikation mit der Datenbank notwendigen Methoden. Ein Controller mit der Verbindung zu diesem Model enth¨lt die vier Methoden des CRUD Modell. a Typischerweise werden Create und Update als Formular in einem View dargestellt. Der View f¨r Read stellt die Informationen des Model in HTML dar. F¨r die Ausf¨hrung u u u von Delete ist nicht zwingend ein eigener View n¨tig. Meist wird hier innerhalb des o Controller eine Weiterleitung zu einer anderen Action - wie einer Listenansicht des

8

Abbildung 1: MVC Modell

Model - gew¨hlt. a

2.3 Datenstrukturen
Die vorrangigste Struktur bei Datenbanken von Webapplikationen bildet das EntityRelation Model. Das Modell hat eine starke Verbindung zur objektorientierten Programmierung. Eine Tabelle speichert diverse Daten innerhalb der Tabellenspalten mit Attributtyp Zahl, Text oder Datum. Das Abstrahieren ist denkbar einfach, ein Model ist eine Klasse dieser Tabelle, dessen Attribute die Tabellenspalten wiederspiegelt. Die Relationen, die in Abbildung 2 dargestellt werden, k¨nnen auf folgende Arten o eingeschr¨nkt werden[QZ10]: a • 1..n oder One-to-Many Beziehung, bezeichnet die Relation zwischen zwei Tabellen. Beispielsweise sind einem Benutzer viele Eintr¨ge zuzuordnen, in umgekehra ter Form jedoch besitzt jeder Eintrag genau einen Benutzer. • 1..1 oder One-to-One Beziehung, stellt einen Spezialfall der One-to-Many Beziehung dar. Hierbei haben beide Tabellen h¨chstens einen zugeh¨rigen Eintrag in o o

9

Abbildung 2: Entity-Relation Modell

Relation. Zum Beispiel hat ein Benutzer genau ein Benutzerprofil. • n..m oder Many-to-Many Beziehung wird verwendet, wenn keine eindeutigen Verbindungen zwischen zwei Tabellen vorhanden sind. Wenn ein Eintrag zu vielen Kategorien geh¨rt und eine Kategorie jeweils wieder viele Eintr¨ge haben o a kann, dann wird eine Many-to-Many Beziehung ben¨tigt. Dies kann man als o eine Verbindung von One-to-Many Beziehungen der beiden Tabellen uber eine ¨ Zwischentabelle sehen. Eine Kategorie hat somit viele Eintr¨ge, wie auch ein a Eintrag vielen Kategorien zugeordnet sein kann.

2.3.1 Object-Relational-Mapping “In order to access the database in an object-oriented way, an interface translating the object logic to the relational logic is required. This interface is called an object-relational mapping, or ORM.” [ZP10] Ein Model stellt in diesem Zusammenhang eine einzelne Datenbanktabelle dar. Die Attribute sind als Membervariablen verankert und uber die ¨ jeweiligen Getter und Setter Methoden erreichbar. 2.3.2 Active Record Pattern Active Record ist ein Spezialfall von ORM, bei dem die Tabellenattribute erst w¨hrend a der Laufzeit bestimmt werden. Somit ist es m¨glich, die Datenbank abzu¨ndern, ohne o a entsprechende Anpassungen im Quellcode vornehmen zu m¨ssen. Der Performance u Verlust ist gering, nur beim ersten Zugriff auf das Model werden die Tabellen bzw.

10

Modelinformationen ausgelesen. Dies bedeutet eine zus¨tzliche Datenbankabfrage pro a Model.

2.4 RAD
RAD steht f¨r Rapid Application Development und bezeichnet ein von Prototypen geu triebenes Entwicklungsmodell in der Softwareentwicklung. Durch Code Generierungen ¨ sowie dem CRUD Modell wird dies beg¨nstigt. Uber das Model wird bei der Generieu rung ein vollst¨ndiger und ausf¨hrbar CRUD Pfad erstellt. Die entsprechenden Cona u troller und Views werden erzeugt. Der Entwickler kann auf dieser Vorlage die weitere Funktionalit¨t nach und nach einarbeiten. Im RAD ist eine schrittweise Entwicklung a mit jeweiligen Prototypen ublich. So wird eine Applikation so lange entwickelt, bis ¨ diese vom Kunden als abgenommen gilt.

11

¨ 3 Ubersicht von bekannten PHP Frameworks
Als Grundlage f¨r eine objektive Zusammenstellung wird nach den in Kapitel 1.6 u genannten Kriterien eine Recherche durchgef¨hrt. Nachdem ein wesentlicher Faktor u eine große Verbreitung bzw. breite Community darstellt, k¨nnen alle Frameworks, o die nicht mit einfachen Suchanfragen mit diversen Internet-Suchmaschinen gefunden wurden, vorweg ausgeschlossen werden. Nachfolgend wird keine vollst¨ndige Liste ala ler verf¨gbaren PHP Frameworks aufgezeigt, jedoch liefert diese einen ausreichenden u ¨ Uberblick uber alle aktuell relevanten Frameworks. ¨

3.1 Adventure PHP Framework (APF)
Das Framework bedient sich anerkannten objektorientierten Design-Pattern und bietet bereits eine Vielzahl von L¨sungen f¨r bekannte Problemstellungen. Auf Tools zur o u automatischen Code Generierung wird mit Absicht verzichtet, außerdem werden erweiterte Konfigurationen im Normalfall vermieden. Als Verbindung zu einer Datenbank ist eine eigens entwickelte Object-Relational-Mapping L¨sung angeboten. Hierbei muss o der Entwickler f¨r jedes Model die Konfiguration einer INI-Datei vornehmen und desu ¨ sen Datenstruktur dort abbilden. Uber diese Konfiguration abstrahiert das Framework Zugriffe auf Daten. Quellcodes f¨r Model Klassen sind allerdings nicht mehr notwenu dig. Das Framework stellt sich im deutschsprachigen Raum als bekannt heraus, ist jedoch, durch die relativ kleine Community, eher mit Vorsicht zu verwenden. Website: http://www.adventure-php-framework.org/ Aktuelle Version: 1.12

3.2 Akelos
Das Akelos Framework folgt dem Vorbild Ruby on Rails und versucht Features wie Active Controller, Active View oder das Active Record Pattern auf PHP zu ubertragen. ¨ Besondere Bedeutung findet hierbei die Datenbank Abstraktion mittels den Active Records. Eine interessante Eigenheit ist die automatische Typerkennung von Attributen bei den Models. Diese erfolgt uber eine Konfigurationsdatei welche ein Datenbank ¨ Schema abbildet und die Attributtypen uber den Attributnamen err¨t. Akelos bewirbt a ¨ das Feature mit der PHP Version 4 kombatibel zu sein. Hierbei sollte dem Entwickler bewusst sein, mit PHP Version wohl auf ein altes Pferd zu setzen.

12

Website: http://www.akelos.org/ Aktuelle Version: 1.0.1

3.3 CakePHP
Mit hohem Bekanntheitsgrad sowie großer Community, bietet CakePHP ein Framework nach dem MVC Modell. In diesem Framework findet sich an einigen Stellen das “Convention over Configuration” Prinzip wieder. Dieses soll dem Entwickler Konfigurationsarbeit erleichtern, solange sich dieser an einige Konventionen h¨lt. Zum Beispiel a k¨nnte man auf die Zuordnung eines Model zur passenden Datenbanktabelle verzicho ten, indem Tabellen- und Klassenname des Model die Konvention erf¨llen. Die Softu ware ist ebenfalls kombatibel zu PHP4. Die offizielle Dokumentation findet sich, den Framework Namen sehr passend, in einem umfangreichen Cookbook wieder. Website: http://www.cakephp.org/ Aktuelle Version: 1.3.3

3.4 Codeigniter
Besonders f¨r Einsteiger empfiehlt sich das Codeigniter Framework. Es bietet einen u schnellen Einstieg und ist im Umfang eher gering. Das Framework kann auch mit PHP4 verwendet werden, sodass auch ¨ltere Hostings verwendet werden k¨nnen. Der geringe a o Umfang spiegelt sich auch im Angebot der Funktionalit¨t wieder. F¨r unerfahrene a u Entwickler liefert diese Framework eine M¨glichkeit zum einfachen Einstieg in die o Entwicklung von Webanwendungen, ohne aus einer Vielzahl von objektorientierten Konzepten ausw¨hlen zu m¨ssen. Die offizielle Dokumentation ist, zum Nachteil des a u Framework, schlecht strukturiert und d¨rftig. u Website: http://www.codeigniter.com/ Aktuelle Version: 1.7.2

3.5 eZ Components
“Die eZ Components stellen ein Komponenten-basiertes Framework dar, dessen Elemente auch unabh¨ngig voneinander und in Kombination mit den Bibliotheken andea rer Anbieter nutzbar sind. Sie bilden damit eine Alternative etwa zum PEAR-Projekt.” [WiE10] Der wohl gr¨ßte Vorteil in der Verwendung dieses Framework ist die Tatsache, o

13

dass Komponenten, also geb¨ndelte Funktionspakete auch vollst¨ndig getrennt voneinu a ander verwendet werden k¨nnen. Die Dokumentation bietet einen schnellen Einsteig, o ist vollst¨ndig und sehr detailiert. eZ Components ben¨tigt mindestens PHP in Versia o on 5.2.1, eine durchaus akzeptable Aktualit¨t der Skriptsprache. a Website: http://www.ez.no/ezcomponents Aktuelle Version: 2009.2.1

3.6 PHPDevShell
Auch wenn es auf den ersten Blick so aussieht, ist PHPDevShell kein Content-ManagementSystem, aber auch kein typisches Framework, das auf dem MVC Modell aufbaut. Ein sehr umfangreicher Backend Bereich soll Konfigurationen und Interaktionen mit dem Framework in grafischer Form unterst¨tzen. Das Framework zielt speziell auf kleiu ne Entwicklerteams ab. Außerdem muss ein zu entwickelndes Projekt den notwendigen Spielraum in den Spezifikationen mit sich bringen, um diversen Eigenheiten adaptiert werden zu k¨nnen. Ein bereits vorgegebener Administrationsbereich bietet o oft gebrauchte Features wie Benutzer-, Navigations- oder Templateverwaltung. Durch diese Vorgaben eignet sich das Framework auch nur f¨r Administrator basierte Appliu kationen. Die Dokumentation ist in einem Wiki gehalten, wenig umfangreich und wird haupts¨chlich durch Beispiele erkl¨rt. a a Website: http://www.phpdevshell.org/ Aktuelle Version: 2.8.1

3.7 Prado
Prado stellt ein PHP Framework mit einem sehr großen Funktionsumfang dar. Der Aufbau erfolgt uber Komponenten, die Abarbeitung ist Ereignis-basierend. Als Vorbild ¨ dienten Borland Delphi und Microsoft ASP.NET, was Prado in der Verwendung auch sehr deutlich von anderen Frameworks unterscheidet. Die ersten beiden Version des Frameworks hatten noch einige fundamentale Probleme. Aus diesem Grund wurde die aktuelle Version 3 v¨llig neu programmiert und kann nun auch f¨r stabile, große o u Systeme verwendet werden. Eine Dokumentation fehlt der Software, sodass ein Einstieg uber Tutorials und Screencasts erfolgen muss. ¨ Website: http://pradosoft.com/

14

Aktuelle Version: 3.1.7

3.8 Seagull
Bereits seit 2001 wird das Seagull Projekt vorangetrieben. Das sehr reife Framework gewinnt durch seine Erfahrung, eine große Community und vielen Codebeispiele. Als Altlast kann man die bis dato bestehende Kompatibilit¨t zu PHP 4 sehen, an einer a Version in PHP5 wird gearbeitet. Die Dokumentation ist sehr umfangreich und findet sich in einem Wiki wieder. Website: http://seagullproject.org/ Aktuelle Version: 0.6.7

3.9 symfony
Das von der franz¨sischen Webagentur Sensio Labs hergestellte System wurde entworo fen, um eine Basis f¨r eigene Entwicklungen zu schaffen. Sp¨ter wurde die Entscheidung u a ¨ gef¨llt, das Framework der Offentlichkeit zug¨nglich zu machen. Dieser Schritt hatte eia a ne ¨ußerst schnelle Verbreitung und ebenso z¨gige Weiterentwicklung zur Folge. Besona u dere Bedeutung legt symfony auf eine Unabh¨ngigkeit der verwendeten Komponenten. a Sogar die Datenbankabstraktion ist lose an das Framework gekoppelt. Außerdem sind Teile des Frameworks auch als eigenst¨ndige Komponenten verf¨gbar. Mit Dezember a u ¨ 2010 soll Version 2 ver¨ffentlicht werden. Hierbei soll eine vollst¨ndige Uberarbeitung o a von symfony aus den bisherigen Erfahrungen der letzten vier Nebenversionen entstehen. Website: http://www.symfony-project.org/ Aktuelle Version: 1.4

3.10 Trax
Wie bei vielen PHP Frameworks versucht PHPonTrax Konzepte des bekannten in der Programmiersprache Ruby verfassten Framework Ruby on Rails zu ubertragen. Die ¨ sehr geringe Dokumentation erschwert einen Einstieg und ist daher f¨r Einsteiger nicht u empfehlenswert. Die Verwendung empfiehlt sich f¨r Softwareentwickler, welche zuvor u bereits Webanwendungen in Ruby on Rails verfasst haben und noch keine Erfahrung mit PHP vorweisen k¨nnen. o

15

Website: http://www.phpontrax.com/ Aktuelle Version: 0.16.0

3.11 Yii
Einfach, effizient und erweiterbar sind die drei Schlagworte zu Yii, mit welchen sich das Framework selbst beschreibt. Im J¨nner 2008 wurde der Grundstein von Qiang Xue, a einem ehemaligen Entwickler von Prado, siehe Kapitel 3.7, f¨r das noch recht junge u PHP Framework gelegt. Vorgegeben wird in Yii, jQuery als Javascript Framework sowie ein standardm¨ßiges Seitenlayout. Beides findet sich auch in diversen funktionalen a Komponenten, in Yii Widgets genannt, wieder. Einen schnellen Einstieg verspricht die ubersichtliche und einfach gehaltene offizielle Dokumentation. ¨ Website: http://www.yiiframework.com/ Aktuelle Version: 1.1

3.12 Zend
Das Zend Framework wird von der bereits in Kapitel 1.2 erw¨hnten Firma Zend Techa nologies Ltd entwickelt. Die Software kann als eine ungebundene Ansammlung an Komponenten gesehen werden, was die Flexibilit¨t bedeutend erh¨ht. Dar¨ber hinaus a o u stellt es im Gesamten ein vollwertiges Framework mit MVC Architektur dar. Eine markante Auff¨lligkeit bei Zend Projekten sind die Namenskonventionen. Dateipfad, a Modul und Funktion einer Klasse bestimmen deren Benennung. “These conventions define a pseudo-namespace mechanism for Zend Framework. Zend Framework will adopt the PHP namespace feature when it becomes available and is feasible for our developers to use in their applications.” [ZEN10] F¨r erste Schritte erh¨lt man auf der u a offiziellen Webseite einen Quickstart Guide. Weiterf¨hrend kann man - bezogen auf die u Aufgabenstellung - eine sehr umfangreiche Beschreibung zu einzelnen Themengebieten einsehen. Website: http://framework.zend.com/ Aktuelle Version: 1.10

16

3.13 Zoop
Eine Besonderheit von Zoop ist eine Kapselung, die mit sogenannten Zonen umgesetzt wurde. Dieser Workaround k¨nnte von dem, bereits in PHP Version 5.3 enthaltenen, o neuen Konzept der Namespace abgel¨st werden. Weiters findet sich die Template Eno gine Smarty fest verankert im View von Zoop. Die Entwicklung von Zoop startete wie auch bei dem Seagull Projekt aus Kapitel 3.8, im Jahr 2001. F¨r Dezember 2010 ist u die Ver¨ffentlichung einer uberarbeiteten Version 2 geplant, wobei diese die bisherige o ¨ Verwendung von PHP4 l¨sen wird. o Website: http://www.zoopframework.com/ Aktuelle Version: 1.5

17

4 Yii, symfony und das Zend Framework
Aus den in Kapitel 3 gelisteten Frameworks wurden Yii, symfony und das Zend Framework f¨r eine genauere Betrachtung ausgew¨hlt. Die Frameworks weisen deutliche u a Unterschiede auf, sind in ihrem Aufbau ¨hnlich und bieten ausreichend Dokumentatia on. Alle drei Projekte sind nach der MVC Architektur entwickelt, aus diesem Grund erfolgt ein allgemeiner Vergleich, im Folgenden aufgeteilt in Model, View und Controller.

4.1 Model
Im Falle eines Yii Framework wird die Erzeugung der Datenbank dem Entwickler auferlegt. Nachdem die Struktur geschaffen und m¨gliche Erstdaten eingespielt wurden, o beginnt die eigentliche Umsetzung des entsprechenden Model. Abgeleitet wird dieses direkt von der allgemeinen Klasse CActiveRecord, welches, wie der Name schon sagt, die Funktionalit¨t des Active Record Patterns wiedergibt. Typische weitere Anpassuna gen erfolgen mit Angabe zur Regelung der Validierung, Relationen sowie der allgemeinen Bezeichnung von Attributen. Diese Adaptionen sind optional, da die Attribute, der aktuelle Aufbau der Datenbank Tabelle zu Laufzeit bei der ersten Verwendung des Model eingeholt werden. Durch erweiterte Konfiguration entsteht somit lediglich ein Komfort, welcher bei weiteren Features des Framework, z.B. Formulardarstellung auf Basis der Modeldefinition, genutzt wird. Das symfony Framework setzt bei Datenbankverwendung auf Doctrine, eine Bibliothek zur Datenbank Abstrahierung. Hierbei kann die Datenbankstruktur aus einer XML oder YAML Schema Defintion generiert werden. Es besteht ebenfalls die M¨glicho keit, diese Schema Definitionen aus einer vorgegebenen Datenstruktur zu generieren. Der Vorteil ist hier ganz klar f¨r Entwickler gegeben, die keine Erfahrungen mit der Eru zeugung von Datenbanken aufweisen k¨nnen. Dem Entwickler wird nach erfolgreicher o Ausf¨hrung des Prozesses zur Erzeugung der Datenbank eine Umgebung generiert, u die bereits funktionst¨chtige Models zu den Datenbanktabellen enth¨lt. Der Aufbau u a erfolgt in h¨chster Ebene uber zwei Klassen. Eine Klasse dient zur direkten Repr¨seno a ¨ tation des Model, eine Klassse zur Darstellung der Tabelle. Ersteres wird instanziert um konkret als Model verwendet zu werden. Die Tabellenklasse bietet Methoden zum Auffinden der Daten und liefert Instanzen der vorher beschriebenen Klasse zur¨ck. u

18

Die Entwicklung des Model erfolgt im Zend Framework ohne vorgenerierten Code. Das Model wird von der Klasse Zend Db Table Abstract, welche ein objekt-orientiertes Interface zur Datenbank Tabelle enth¨lt, abgeleitet. Diese stellt allgemeine Methoden a zur Datenverwaltung im CRUD Modell zur Verf¨gung, allerdings halten sich diese u sehr beschr¨nkt in ihrer Funktion. Jegliche Erweiterung obliegt dem Entwickler, dies a birgt einerseits mehr Zeitaufwand, verringert jedoch Funktionalit¨t des Model auf die a tats¨chlich ben¨tigte. a o 4.1.1 Beispielcode Listing 2 zeigt einen praktischen Vergleich der Ausf¨hrung eines Datenerhalt uber ein u ¨ Model.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

<?php // Y i i Model U s e r ( u s i n g i n t e r n a l C A c t i v e R e c o r d ) $ u s e r=U s e r : : model ( ) −>f i n d ( ’LOWER( name)=? ’ , a r r a y ( C H t t p R e q u e s t : : g e t Q u e r y ( ’ name ’ , ’ g u e s t ’ ) ) ); // symfony Model U s e r ( u s i n g component D o c t r i n e ) $ u s e r = D o c t r i n e : : g e t T a b l e ( ’ U s e r ’)−>findOneByName ( $ t h i s −>g e t R e q u e s t ()−> g e t P a r a m e t e r ( ’ name ’ , ’ g u e s t ’ ) ); // Zend Model U s e r $ u s e r m a p p e r = new A p p l i c a t i o n M o d e l U s e r M a p p e r ( ) ; $ u s e r = new A p p l i c a t i o n M o d e l U s e r ( ) ; $ u s e r m a p p e r −>f i n d O n e B y L a b e l ( $ t h i s −>g e t R e q u e s t ()−>getParam ( ’ name ’ , ’ g u e s t ’ ) , $user );

Listing 2: Model im Vergleich

19

4.1.2 Zusammenfassung ¨ Ubersichtlich betrachtet, bekommt man mit Yii eine schnelle und einfache M¨glichkeit o Daten zu verwalten, bei der eine Konfiguration kaum notwendig ist. Die Tabellenattribute werden w¨hrend der Laufzeit im Model vermerkt. V¨llig gegens¨tzlich passiert a o a die Erzeugung von Models in symfony uber die Beschreibung der Datenstruktur in ¨ einer Datei im Format XML, oder dessen gleichwertigen Kurzform YAML. Ein Vorteil ¨ hierbei ist die Ubersichtlichkeit der Models und Relationen sowie die M¨glichkeit, die o Datenbank selbst direkt uber das angelegte Schema zu erzeugen. Spezialf¨lle k¨nnen a o ¨ sich schnell zu einer Herausforderung entwickeln. Viel Eigenarbeit verspricht das Zend Framework. Es wird lediglich die Erstellung einer Basisklasse ohne jegliche Methoden unterst¨tzt. Die Datenbank Erzeugung sowie die vollst¨ndige Anpassung des Model u a erfolgen vom Entwickler ohne weitere Hilfe des Framework. Dies ben¨tigt einiges an o Mehraufwand, verspricht jedoch eine Aufgaben orientierte L¨sung. o

4.2 View
Out-of-the-box liefert Yii ein vorgefertigtes Layout, welches auch in vielen Widgets, den Erweiterungen von Yii, enthaltenen ist. Je Controller kann festgelegt werden, ob beispielsweise ein einspaltiges oder zweispaltiges Layout verwendet werden soll. Keineswegs ist diese Konfiguration vorgegeben, sondern dient eher als Beispiel, wie die Layout Erzeugung in Yii verwaltet werden kann. Bei anderer Verwendung muss es jedoch erst aus den einzelnen Teilen entfernt werden. Um kleine Layoutst¨cke in Views u einzubinden, kann auf sogenannte Partials zur¨ckgegriffen werden. Diese vereinfachten u kleinen Views enthalten eine konkrete Darstellung, welche in verschiedenen Bereichen wiederverwendet werden kann. So kann man die Darstellungsvorgabe der Kurzfassung eines News-Beitrags in einem Partial beschreiben und dieses einerseits in der News Listenansicht, andererseits in einer Sidebar auf anderen Seiten integrieren. Oft ist ein Partial alleine unzureichend, da eine zugeh¨rige Funktionalit¨t ausgef¨hrt werden o a u muss. Zu diesem Zweck sind in Yii sogenannte Widgets eingef¨hrt. Sie erweitern ein u Partial um die Abarbeitung einer Logik. In symfony werden generelle Templates festgelegt, der Inhalt der eigentlichen Views ist in der Variablen $sf content enthalten und wird an der entsprechenden Stelle im Layout ausgegeben. Die Views selbst sind in den Modulen gespeichert. Mit einer gesonderten Konfiguration kann jeder View einfachen Rahmenbedingungen angepasst wer-

20

den. Das Prinzip der Partials ist auch in symfony enthalten. Ein durch Funktionalit¨t a erweitertes Partial bezeichnet ein Component. Diese werden zwar ¨hnlich wie Actions a definiert, jedoch werden sie indirekt uber die Integration in einem View ausgef¨hrt. u ¨ Slots sind ein weiteres Konzept innerhalb der Pr¨sentationslogik von symfony. Ein Bea reich innerhalb des Haupttemplate muss mit einem eindeutigem Bezeichner versehen werden. Dieser Bereich definiert einen Slot und kann nun aus jedem View angesprochen und bef¨llt werden. u Innerhalb des Zend Framework werden Layout und View getrennt behandelt, die Verarbeitung erfolgt beiderseits wiederum in einem Template mit HTML und PHP Elementen. Es ist kein strikter Aufbau der View Architektur vorgegeben, eine empfohlene Vorgehensweise findet sich jedoch in den offiziellen Einf¨hrungen. u 4.2.1 Zusammenfassung Eine Applikation ohne Layout Vorstellungen profitiert von dem vorgefertigten Standard Layout von Yii. Bei einem vorgegebenen Layout muss das Standard Layout jedoch erst an vielen Stellen entfernt bzw. uberschrieben werden. Dadurch entsteht ein deut¨ licher Mehraufwand. Partials, Components und Slots liefern dem symfony Framework eine Modularit¨t und Wiederverwendbarkeit innerhalb der Pr¨sentationslogik. Eine a a zus¨tzliche Konfiguration verspricht einfache und schnelle Anpassungen. Dem Zend a Framework steht abermals mehr Flexibilit¨t, jedoch auch ein erh¨hter Entwicklungsa o aufwand gegen¨ber. u

4.3 Controller
Die Abarbeitung der Kontrolllogik unterscheidet sich innerhalb Yii, symfony und Zend nicht wesentlich. Eine vom Basis Controller abgeleitete Klasse steuert die gespeicherten Actions. Die Wahl des Controllers basiert auf der Route des HTTP-Request. Diese kann in den Konfigurationen abge¨ndert werden. So ist es einfach, eine Standard Action a festzulegen. Ein typisches Beispiel sei folgendes. Ein Controller erm¨glicht den Inforo ¨ mationszugriff auf Filme, die entsprechende Liste oder Ubersichtseite, entspricht der Route http://www.example.com/index.php/movie/index. Einfache Konfigurationen, mit Unterst¨tzung der URL-Rewrite Technik des Webservers, erlauben eine Anpasu sung der dargestellten Route. Im genannten Beispiel k¨nnte dies zu einer gew¨nschten o u

21

Route wie http://www.example.com/movies.html f¨hren. Diese ist sowohl f¨r den Beu u sucher als auch f¨r Suchmaschinen aussagekr¨ftig und lesbar. u a 4.3.1 Zusammenfassung In allen drei Frameworks erfolgt die Ausf¨hrung der Kontrolllogik in sehr ¨hnlicher u a Weise. Der HTTP Request wird mit speziellen Parametern festgelegt, welche die auszuf¨hrenden Controller und Action eindeutig wiedergeben. Innerhalb der Action wird u s¨mtliche Prozesslogik ausgef¨hrt, bei Bedarf Daten via Models eingeholt und diese a u an den View ubergeben. ¨

4.4 Komponenten eines Framework
4.4.1 Formular und Formularvalidierung ¨ Die Argumenten Ubergabe einer HTTP Anfrage erfolgt in PHP meist uber die HTTP¨ Request Methoden POST oder GET. Die GET Parameter sind f¨r den Besucher in u der URL erkennbar und werden lediglich mittels URL-Rewrite noch dekoriert. Ein typischer GET Aufruf zielt darauf ab, Informationen zu erhalten. POST wiederum sendet Informationen an eine Webseite, die vom System verarbeitet werden sollen. Die Informationen werden nicht innerhalb der URL ausgegeben. Das Konzept von HTML Formularen unterst¨tzt diese Vorgehensweise mit den notwendigen darstellbaren Eleu menten. Yii liefert mit der Klasse CHtml ein Sammlung von h¨ufigen HTML Elementen, a darunter auch Formelemente. Diese lassen sich bequem uber ActiveForm Elemente ¨ mit einem Model verbinden. Die Validierung ist hierbei innerhalb des Model definiert, sodass weder Controller noch View mit weiterer Logik erg¨nzt werden m¨ssen. a u Innerhalb von symfony gibt es ein ¨hnliches Konstrukt mit Namen sfForm. Hierbei a ¨ werden neben Models auch Formklassen generiert. Uber diese kann man ein konkretes Formular erzeugen, welches im View direkt ausgegeben werden kann. Die Definition der Validierung erfolgt hierbei nicht im Model, sondern direkt in der speziellen Form Klasse. Eine umfangreiche Komponenten liefert Zend Form und vereinfacht die Erzeugung ¨ von Formularen in Webanwendungen. Zur Uberpr¨fung von Eingabedaten kann die u Komponente Zend Validate herangezogen werden.

22

4.4.2 Internationalisierung und Lokalisierung Nach dem Prinzip der Internationalisierung kann eine Webapplikation so entwickelt werden, dass die Darstellung f¨r den Besucher in verschiedenen Sprachen aufbereitet u ¨ werden kann, ohne Anderungen an der Umsetzung vornehmen zu m¨ssen. Lokalisieu rung entspricht demselben Prinzip, jedoch zielt dies auf die Formatierung von Darstellungen wie eines Datum oder einer Nummer vor. Die gebr¨uchliche Kurzform f¨r a u Internationalisierung ist i18n, f¨r Lokalisierung i10n. Das MVC Modell liefert einen u besonderen Vorteil. Nach Konvention sind alle anzuzeigende Texte innerhalb der Darstellungslogik, dem View enthalten. Nat¨rlich k¨nnen auch gespeicherte Daten in veru o schiedene Sprachen vorliegen. Die Verarbeitung erfolgt in diesem Fall uber das Model. ¨ ¨ Das Yii Framework bietet f¨r die Ubersetzung innerhalb des View eine allgemein u ¨ zug¨ngliche Methode. Die Ubersetzungen selbst werden in einfachen Textdateien hina terlegt. F¨r die Lokalisierung stehen einige Helfer-Klassen zur Verf¨gung, die bei Beu u darf geladen werden k¨nnen. o Innerhalb von symfony sowie im Zend Framework ist ein sehr ¨hnlicher Aufbau zu a ¨ verzeichnen. Uber Helfer-Methoden werden Texte und Formatierungen umgewandelt, ¨ die Ubersetzungen sind in Text-Dateien gespeichert. Zus¨tzlich wird in symfony die a Mehrsprachigkeit von Datenhaltung in der Datenbank ber¨cksichtigt. u 4.4.3 Caching “One of the ways to speed up an application is to store chunks of generated HTML code, or even full pages for future requests. This technique is known as caching [. . . ]” [ZP10] Bevor ein Controller die Ausf¨hrung einer Action veranlasst, sucht dieser nach u der bereits zuvor generierten Darstellung. Wird ein entsprechender HTML Code gefunden, so ersetzt dieser die Ausf¨hrung der Action. Die Antwort kann schneller an u den Benutzer erfolgen und der Webserver wird durch die gesparte Rechenarbeit entlastet. Der Cache, also die bereits vorgefertigten HTML St¨cke, werden in Dateien, u der Datenbank oder auch im Arbeitsspeicher des Webserver gespeichert. Neben dieser Methode werden meist auch Konfigurationen zusammengefasst. Yii unterscheidet zwischen Daten, Fragment und Page Caching. Beim Daten Caching k¨nnen Informationen an eine Cache Komponente ubergeben und uber eine eindeuo ¨ ¨ tig vergebene Identifikation auch wieder abgeholt werden. Innerhalb des View k¨nnen o uber den Fragment Cache Inhaltselemente festgelegt werden, die nicht bei jedem Auf¨

23

ruf ausgef¨hrt werden m¨ssen. Die Verwaltung der Speicherung f¨hrt das Framework u u u selbst durch. Die Zwischenspeicherung einer gesamten Webseite erfolgt uber den Page ¨ Cache. Dieser kann im Controller konfiguriert werden und bedarf keiner weiteren Anpassungen. Zu allen Cache Typen kann man eine Lebensdauer, also einen Zeitrahmen, oder andere Rahmenbedingung zur G¨ltigkeit festlegen. u Das symfony Framework bietet zu den Komponenten des View Modell einen Caching Mechanismus. Eine Action, ein Partial, ein Component oder ein Slot k¨nnen zur o Zwischenspeicherung zugewiesen werden. Dies erfolgt in einer exklusiv daf¨r vorgeseu henen Konfiguration. Auch eine Fragment Caching findet sich in symfony wieder. Wie auch schon bei Yii wird dieser direkt im View angegeben. Im Zend Framework bietet mit Zend Cache eine Komponente, um Caching Mechanismen in einer Webapplikation zu integrieren. Die Zwischenspeicherung erfolgt, wie bereits bei Yii kennengelernt, uber eine Identifikation mit zus¨tzlich definierter Lea ¨ bensdauer. In der offiziellen Dokumentation findet sich ein ausreichende Einf¨hrung u zur Erstellung einer Caching Umgebung, eine vorgefertigte L¨sung gibt es von Seiten o Zend jedoch nicht. 4.4.4 Testen F¨r eine komplexe Anwendungen, oder Applikationen denen eine hohe Stabilit¨t oder u a Sicherheit abverlangt wird sind automatisierte Tests notwendig. “Automatisierter Test bedeutet, dass die Testf¨lle mit Hilfe eines Werkzeugs und ohne weiteres Zutun eines a menschlichen Testers aufgerufen, durchgef¨hrt und mit den Sollergebnissen verglichen u werden. Die hohe Forderung, alle unit tests st¨ndig durchzuf¨hren, ist ohne Automaa u tisierung nicht zu erf¨llen.” [Sch07] Man unterscheidet zwischen Modul und System u Test. Bei einem Modultest wird eine separiert ausf¨hrbare Funktionalit¨t, wie beiu a spielsweise eine Methode, auf ein korrektes Ergebnis gepr¨ft. Die Vorgehensweise ist u so, dass m¨glichste viele und unterschiedliche Eingaben mit den korrespondierend richo tigen Ausgaben verglichen werden. H¨ufig wird f¨r Modultest auch die englische Bea u zeichnung Unit-Test verwendet. Die zweite, gel¨ufige Vorgehensweise sind ein System a oder auch Funktions Test. Vergleichbar sind diese mit aus der Modellierung bekannten Use-Cases, einer schematischen Darstellung eines Ablaufs. Nachdem Webapplikationen vorwiegend in Internet Browsern aufgerufen werden, passiert die Ausf¨hrung eines Test u auch automatisiert in einem simulierten Browser. Getestet werden einzelne Aktionen,

24

die mit der Anwendung durchf¨hrbar sind. Eine vollst¨ndige Abdeckung ist in diesem u a Fall nicht das Ziel, meist auch gar nicht durchf¨hrbar. Wichtig ist jedoch das Testen der u Hauptfunktionalit¨t sowie weiterer kritischer Sicherheitsbereiche wie Benutzer Login a oder mit Benutzerrechten versehene Bereiche. Ist erstmals eine Basis an Tests geschaffen, so kann nach jeder Neuerung eine Ausf¨hrung dieser erfolgen. Auf diesem Weg u sind Fehler in komplexen Abh¨ngigkeiten leichter zu aufzufinden. Neben der M¨glicha o keit, mit Hilfe von Tests die Sicherheit und Stabilit¨t eines Webprojekt zu erh¨hen, ist a o es auch eine gute L¨sung, als Vorgehensmodell eine Test-getriebene Entwicklung zu o w¨hlen. Eine Teilspezifikation wird gew¨hlt, die entsprechenden Tests eingepflegt. Bei a a ¨ der Ausf¨hrung der automatisierten Uberpr¨fung schlagen diese fehl. Dem Programu u mierer stellt sich nun die Aufgabe, den Sourcecode dahingehend zu entwickeln, dass alle Test erfolgreich durchlaufen werden. Mit der Generierung von Models liefert Yii automatisch ein Rohger¨st von Klassen u f¨r Modul- wie auch Funktionstests. Diese sind dem Model entsprechend aufgebaut und u k¨nnen als Vorlage direkt verwendet werden. Modultests werden uber PHPUnit, ein o ¨ in der Programmbibliothek PEAR frei verf¨gbaren Testframework, durchgef¨hrt, f¨r u u u funktionale Tests wird Selenium, ein automatisiertes Testframework, das mit Hilfe von Javascript am Betriebssystem installierte Browser simuliert, angeboten. PHPUnit und Selenium sind im Framework nicht enthalten, die Installation obliegt dem Entwickler. F¨r Modultest wurde in symfony eine eigene Umgebung mit Namen Lime geschaffen. u Beabsichtigt wurde eine verbesserte Lesbarkeit sowie eine unabh¨ngige Testumgebung. a Die Verwendung und Ausf¨hrung passiert analog zu dem in Yii verwendeten PHPUu nit Framework. Auch f¨r die simulierte Ausf¨hrung in einem Webbrowser wurde eine u u ¨ eigene Applikation erzeugt. Uber die sfBrowser PHP Klasse kann ein Umgebung erzeugt und mit dessen Methoden eine Ausf¨hrung nachgespielt werden. Der Nachteil u an der Ausf¨hrung in dieser Variante ist, dass kein Client-Seitiger Code wie Javascript u ausgef¨hrt werden kann. Hierzu empfiehlt smfony ebenfalls selenium. “The solution is u called Selenium, which is a test framework written entirely in JavaScript. It executes a set of actions on a page just like a regular user would, using the current browser window. The advantage over the sfBrowser object is that Selenium is capable of executing JavaScript in a page, so you can test even Ajax interactions with it” [ZP10] Das Zend Framework beschr¨nkt sich auf Modultest und leitet diese von PHPUnit a ab. Erweitert wird dies noch mit einer vereinfachten M¨glichkeit zur Benutzung von o

25

Testdatenbanken. Funktionale Test finden im Zend Framework keinen Einzug. Eine Verwendung von Selenium, wie in den Beispielen zuvor, ist nat¨rlich m¨glich, im Zend u o Framework jedoch nicht out-of-the-box vorgesehen. 4.4.5 Sicherheit Die Frameworks symfony und Yii unterstreichen in ihren Dokumentationen bereits die Wichtigkeit von Tests besonders. Unterst¨tzt wird dies noch davon, dass bei der u automatisierten Generierung der Models auch die zugeh¨rigen Rohger¨ste zum Teso u ten erzeugt werden. Neben den Testen gibt es eine Reihe von Techniken, um Sicherheitsl¨cken vorzubeugen, zwei davon werden nachfolgend diskutiert. u So beschreibt Output Escaping eine Strategie, durch Benutzer erfolgte Eingaben so aufzubereiten, dass dieser keinen Schadcode einschleusen kann. Das Prinzip der Nutzung einer Sicherheitsl¨cke bei der Ausgabe bzw. auch Ausf¨hrung von benutu u zergenerierten Code nennt man Cross-Site Scripting oder auch XSS. Konkret wird jeglicher von Benutzern gespeicherter und erzeugter Inhalt einer Webapplikation bei der Ausgabe gefiltert, sodass vorweg Zeichen, die zum HTML Zeichensatz geh¨ren in o entsprechende Sonderzeichen umgewandelt werden. Yii wie auch das Zend Framework bieten hierzu eine Methode, die auf den auszugebenden Inhalt angewendet werden kann. In symfony kann Output Escaping konfiguriert werden, sodass s¨mtliche an den a View gelieferten Daten bereits von potentiellem Schadcode entfernt wurden. Eine ¨hnliche Vorgehensweise erzeugen SQL Injections. Parameter eines HTTPa Request, welche bei der Erzeugung von dynamischen Webseiten notwendig sind, werden vom Angreifer so abge¨ndert, dass dieser in die Kommunikation zur Datenbank a eingreifen kann. Beispielsweise kann dieser so Benutzerlogins umgehen oder sensible Daten aus der Datenbank auslesen. Jeweils Yii, symfony und das Zend Framework setzen dem Software Entwickler eine Schnittstelle zur Datenbank vor, sodass dieser bei korrekter Verwendung keine weitere Vorsicht walten lassen muss. 4.4.6 Dokumentation Aller Einstieg ist schwer, zumindest ohne das Vorliegen einer guten Dokumentation. Der Vergleich scheint hier denkbar einfach uber die verf¨gbaren Lernmethoden. Auf u ¨ der Website von Yii werden lediglich zwei Tutorials, eine allgemeine Einf¨hrung, eine u Cookbook Sammlung, zwei Screencasts sowie Cheatsheets angeboten. Der Umfang

26

dieser Dokumentation ist auf den ersten Blick sehr sp¨rlich, liefert jedoch einen guten a und strukturierten Einblick in das Framework und in vielen Bereichen auch dar¨ber u hinaus. Das erste Buch zu Yii wurde w¨hrend bzw. kurz vor Abschluss dieser Arbeit a ver¨ffentlicht. o Die franz¨sische Firma Sensio Labs, Hauptentwickler von symfony, liefert eine Reihe o von B¨chern, die auf symfony abgestimmt sind. Diese sind auf der offiziellen Webseiu te auch als kostenlose Druckversion verf¨gbar. Neben diesen gibt es, durch die sehr u große Community, eine Vielzahl an How-Tos und Tutorials. Als zus¨tzlichen Bonus a ver¨ffentlicht symfony jedes Jahr zur Weihnachtszeit eine 24 Stunden Dokumentation, o aufgeteilt auf eine Stunde pro Tag, zur Umsetzung einer praktischen Webseite. Mit uber 1000 Seiten wird der Programmer’s Reference Guide, das offizielle Hand¨ buch f¨r Entwickler, von der Firma Zend Technologies Ltd. beworben. Ein vollst¨ndige u a ¨ Ubersetzung liegt in Deutsch, Franz¨sisch, Japanisch, Russisch und Chinesisch vor. o Multimedial werden Podcasts, abonnierbare Mediendaten und Webinars, sowie Seminare uber das World Wide Web angeboten. Dar¨ber hinaus gibt es von der Entwicku ¨ lungsfirma angebotene Trainings, Consultings und Zertifizierungen.

27

5 Zusammenfassung und Ausblick
Die in Kapitel 4 gepr¨ften Frameworks sind eine gute Basis f¨r Webapplikationen. Aus u u den Kriterien in Kapitel 1.6 ergibt sich eine zufriedenstellendes Ergebnis. Qualit¨t, und a Stabilit¨t bieten die Frameworks uber Tests, siehe Kapitel 4.4.4, und liefern auch Vora ¨ gaben um gute Sicherheit in einem Web Projekt zu erzeugen. Das junge Framework Yii ist in seiner Verbreitung noch relativ klein, uberzeugt aber durch die verwendeten ¨ Konzepte. Die Performance wird bei Yii meist besonders hervorgehoben. Diese wird zus¨tzlich mit den in Kapitel 4.4.3 angesprochenen Cache Methoden unterst¨tzt. Zend a u und symfony haben Ihre Komponenten lose an das Framework gekoppelt, sodass diese auch ohne dem Framework selbst in einem Web Projekt eingebunden werden k¨nnen. o Dies liefert den Frameworks eine bedeutende Unabh¨ngigkeit sowie auch Flexibilit¨t. a a Yii hat vordefinierte Abh¨ngigkeiten, die erst durch entsprechende Konfigurationen a ¨ ausgeblendet werden. Außerst umfangreich zeigen sich die Dokumentation, der Funktionsumfang sowie die Erweiterung. Durch die bereits mehrmals angesprochene kleine Community des Yii Framework, der eher geringen Anzahl an Erweiterungen sowie Abh¨ngigkeiten innerhalb der Softa ware, eignet sich das Framework nicht f¨r große Webapplikationen. In der Umsetzung u von kleinen Projekten wiederum bietet Yii einige Vorteile - wie ein vorgefertigtes Layout und funktionsbereiten Teilst¨cken. u Mit einer bedeutenden Verbreitung ist symfony ein ideales Werkzeug, um mittlere bis große Webapplikationen zu erzeugen. F¨r kleinere Web Projekte ist der anf¨ngliche u a Aufwand bis zur Basis einer Applikation wohl nicht rentabel. F¨r erfahrene PHP Entwickler ist das Zend Framework die beste Wahl f¨r ein Prou u jekt. Die Hauptarbeit liegt in der Umsetzung mit PHP und weniger mit der Konfiguration oder Adaption eines Frameworks. Alle drei Frameworks setzen auf aktuelle Konzepte von modernen PHP Software Frameworks, erf¨llen so auch die Anforderung an Aktualit¨t. u a Mit Ver¨ffentlichung des ersten Buches, einer Einf¨hrung in das Yii Framework mit o u Titel “Agile Web Application Development with Yii1.1 and PHP5” ist ein guter Schritt getan, neue Entwickler f¨r Yii zu begeistern, sodass auch eine Weiterentwicklung voru angetrieben wird. Mit Dezember 2010 wird die Ver¨ffentlichung von symfony 2.0 erwartet. Eine verbeso serte Performance sowie Anpassungen in der Struktur sind geplant. Mit der aktuellen

28

umfangreichen Verbreitung von symfony ist eine schnell Weiterentwicklung vorgegeben. Das Zend Framework mit der Firma Zend Technologies Ltd. als Hauptentwickler von PHP liefert dadurch wohl auch einen uberlegenen Vorteil gegen¨ber anderer Frameu ¨ works. Die Weiterentwicklung scheint vorerst mit der Entwicklung von PHP garantiert. Ausserdem sind neue Konzepte der Skriptsprache PHP schnell innerhalb des Framework zu finden. Ob als Einstiegshilfe f¨r unerfahrene Entwickler und einfachen Webseiten, oder u Grundstruktur komplexer Webanwendungen von langj¨hrigen PHP Entwicklerteams, a ein PHP Framework ist ein ideales Werkzeug um mehr Effizienz in einer Umsetzung zu erfahren.

29

6 Anhang A - Entscheidungsmatrix
Die Verwendung erfolgt indem in die ¨ußere Spalte die prozentuale Gewichtung der a Projekteigenschaften ausgef¨llt wird. Die Summe der Gewichtungen ergibt 100%. Eiu genschaften ohne Relevanz werden mit 0% versehen. Sobald dies erfolgt ist, werden die einzelnen Werte-Felder angewendet auf den entsprechenden Prozentsatz der Zeile, je PHP Framework summiert. Das Ergebnis wird in die letzte Zeile geschrieben und verglichen. Ein m¨glichst niedriger Wert entspricht einer g¨nstigen Verwendung des o u Framework.

Yii Erfahrung des Entwicklerteam Schneller Einstieg Umfangreiches Projekt Kleines Projekt Einmalige Entwicklung Fortw¨hrende Entwicklung a Schnelle Ergebnisse, Prototyping Genaue Layoutvorgaben Verwendung von Bibliotheken Anforderung Performance Anforderung Sicherheit Anforderung Stabilit¨t a Große Datenstrukturen Komplexe Datenstrukturen Summe 2 1 3 1 1 3 1 2 2 1 2 1 3 2

symfony 2 2 2 3 2 2 2 1 1 2 1 1 2 1

Zend 1 3 1 3 3 1 3 1 1 2 1 2 1 2

Relevanz in %

100%

30

Abbildungsverzeichnis
1 2 MVC Modell, Quelle: [ZP10] . . . . . . . . . . . . . . . . . . . . . . . . Entity-Relation Modell, Quelle: [QZ10] . . . . . . . . . . . . . . . . . . 9 10

Literatur
[CHLJ09] Wei Cui, Lin Huang, LiJing Liang, and Li Jing. The research of php development framework based on mvc pattern. 2009. [IBM10] Php frameworks. 2010. http://www.ibm.com/developerworks/

opensource/library/os-php-fwk1/ (25.07.2010). [oEE90] The Institute of Electrical and Electronics Engineers. Iee standard glossary of software engineering terminology. 1990. [QZ10] [Sch07] [WiE10] Xue Qiang and Xiang Wei Zhuo. The definitive guide to yii 1.1. 2010. Kurt Schneider. Abenteuer Softwarequalit¨t. 2007. a ez publish. 2010. http://de.wikipedia.org/wiki/EZ_Publish#eZ_

Components (25.07.2010). [WiP10] [ZEN10] Php. 2010. http://de.wikipedia.org/wiki/PHP (24.11.2010). Programmers reference guide. 2010. http://framework.zend.com/

manual/en/coding-standard.naming-conventions.html (08.08.2010). [ZP10] Francois Zaninotto and Fabien Potencier. A Gentle Introduction to symfony. 2010.

31