evaluierung von php frameworks
DESCRIPTION
Bakkalaureatsarbeit von Christoph LipautzTRANSCRIPT
Bakkalaureatsarbeit
Evaluierung von PHP Frameworks
Christoph Lipautz
————————————–
Technische Universitat Graz
Graz University of Technology
Eidesstattliche Erklarung
Ich erklare an Eides statt, dass ich die vorliegende Arbeit selbststandig verfasst, andere
als die angegebenen Quellen/Hilfsmittel nicht benutzt und die den benutzten Quellen
wortlich und inhaltlich entnommenen Stellen als solche kenntlich gemacht habe.
Graz, am 28. November 2010
Unterschrift
ii
Kurzfassung
Die Wahl einer geeigneten Entwicklungsumgebung ist der Grundstein fur
die erfolgreiche Umsetzung eines Webprojektes. Aus der verbreiteten freien
Skriptsprache PHP haben sich eine Reihe von Software Frameworks entwi-
ckelt. Diese unterscheiden sich in ihrem Aufbau sowie ihrer Verwendung.
Abhangig von der Spezifikation eines Projektes soll ein geeignetes PHP
Framework gefunden werden. Diese Arbeit gibt eine Ubersicht moderner
Frameworks, aktueller Konzepte und einigen Vorzuge in deren Verwendung.
Im Detail werden drei PHP Frameworks betrachtet, eine Gegenuberstellung
durchgefuhrt und Unterschiede aufgezeigt.
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 ap-
propriate 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 Einfuhrung 1
1.1 Ausgangssituation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Die Skriptsprache PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Zielsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Warum ein PHP Framework verwenden? . . . . . . . . . . . . . . . . . 3
1.6 Was erwarte ich mir von einem PHP Framework . . . . . . . . . . . . . 4
2 Grundlegende Konzepte 8
2.1 MVC Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 CRUD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.1 Object-Relational-Mapping . . . . . . . . . . . . . . . . . . . . 10
2.3.2 Active Record Pattern . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 RAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Ubersicht von bekannten PHP Frameworks 12
3.1 Adventure PHP Framework (APF) . . . . . . . . . . . . . . . . . . . . 12
3.2 Akelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3 CakePHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.4 Codeigniter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.5 eZ Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.6 PHPDevShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.7 Prado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.8 Seagull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.9 symfony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.10 Trax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.11 Yii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.12 Zend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.13 Zoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4 Yii, symfony und das Zend Framework 18
4.1 Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
v
4.1.1 Beispielcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.1.2 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2 View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.1 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3 Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3.1 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.4 Komponenten eines Framework . . . . . . . . . . . . . . . . . . . . . . 22
4.4.1 Formular und Formularvalidierung . . . . . . . . . . . . . . . . 22
4.4.2 Internationalisierung und Lokalisierung . . . . . . . . . . . . . . 23
4.4.3 Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.4.4 Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.4.5 Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.4.6 Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5 Zusammenfassung und Ausblick 28
6 Anhang A - Entscheidungsmatrix 30
vi
1 Einfuhrung
1.1 Ausgangssituation
Das World Wide Web beschrankt sich nicht nur auf die Darstellung einfacher stati-
scher Seiten die untereinander verlinkt sind, sondern dient auch als Oberflache fur
verteilte Programme, den Webanwendungen. Durch die steigende Komplexitat dieser
Anwendungen definiert sich die Notwendigkeit von performanter, stabiler und flexibler
Software. Die Entwicklung immer leistungsfahigerer Hardware, nach dem Gesetz von
Moore, ermoglicht schnellere Server sowie Internetverbindungen. Dies fuhrte wiederum
zur Moglichkeit, anspruchsvolle Applikationen innerhalb des Web zu betreiben. Was
fruher in einfachen, verteilten, meist voneinander unabhangigen Skripten ausgefuhrt
wurde, wird heute in großen Softwaresystemen verarbeitet. Die Verwendung solcher
Softwaresysteme ermoglicht die Darstellung von dynamischen Inhalten. Es entstehen
durchaus große Datensammlungen, die in geeigneter Form verarbeitet und abgebildet
werden mussen. Vermehrt gewinnt die Interaktion des Benutzers mit diesen Anwendun-
gen an Bedeutung. Weiters werden Desktop-Anwendungen zur Verwendung in einen
Internetbrowser portiert.
Bei der Ausfuhrung der Software in einer Webumgebung unterscheidet man zwischen
Server- und Client-seitiger Abarbeitung. In einer Server-seitigen Anwendung erfolgt die
Ausfuhrung vollstandig auf dem entfernten Server, wohingegen eine Client-seitige Ab-
arbeitung direkt auf Rechner des Nutzers erfolgt. Diese Arbeit konzentriert sich auf die
freie Skriptsprache PHP: Hypertext Preprocessor, welche am Server ausgefuhrt wird.
Sie wachst stetig in ihrem Funktionsumfang und bietet neue Konzepte. Durch die
fortlaufende Weiterentwicklung hat sich PHP etabliert und sich gegenuber anderen
Skriptsprachen wie zum Beispiel Perl durchgesetzt. Durch abgegrenzte Moglichkei-
ten des World Wide Web, bzw. des HTTP-Protokolls, gibt es Einschrankungen von
Losungswegen von Problemen. Dies fuhrt wiederum dazu, dass eine konkrete Losung
haufig in vielen Variationen, mit leichten Unterschieden vorliegt. Es ist naheliegend,
eine allgemein ausreichende und passende Losung zu verwenden, gegebenenfalls zu ad-
aptieren und das sprichwortliche Rad nicht neu zu erfinden. “Wiederverwendbarkeit ist
ein alter Traum der Softwaretechnik. Wo sie funktioniert, schafft sie bessere Qualitat
in kurzerer Zeit.” [Sch07]
1
1.2 Die Skriptsprache PHP
Die im Jahre 1995 ins Leben gerufene, frei zugangliche Skriptsprache PHP, ist aktuell
mit Version 5.3 verfugbar. Ursprunglich wurde die bis heute in der Programmier-
sprache C verfasste Skriptsprache von Rasmus Lerdorf entwickelt, um eine Sammlung
von Skripten der Programmiersprache Perl, bei welcher es sich ebenfalls um eine frei
zugangliche Skriptsprache handelt, zu ersetzen[WiP10]. Die Softwareentwickler Andi
Gutman und Zeev Suraski entwickelten mit dieser Basis die Version PHP3, welche
erstmals eine starkere Verbreitung erfuhr. Aus diesem Fortschritt heraus grundeten
Gutman und Suraski die Firma Zend Technologies Ltd., die bis heute fuhrend hinter
der Entwicklung von PHP steht. Der Name leitet sich aus den beiden Grundervorna-
men Zeev und And i ab. Mit PHP Version 4 wurde die Skriptsprache Perl endgultig
in der Verbreitung im Bereich der Programmierung von dynamischen Webseiten uber-
holt. Hierzu fuhrte vor allem der schnellerer Einstieg in die Programmierung mit PHP
gegenuber Perl. Mit Sommer 2004 wurde, mit verbesserter Unterstutzung von objek-
torientierten Konzepten, die Version 5 veroffentlicht. Da die verschiedenen Versionen
von PHP große Unterschiede aufweisen, ist es ublich, die zugehorige Hauptversions-
nummer der Bezeichnung PHP anzuhangen. Die Einfachheit der Sprache verspricht
vor allem unerfahrenen Entwicklern schnelle Ergebnisse in einer Umsetzung. Konzepte
wie eine schwache Typisierung vereinfachen die schnelle Erzeugung kleiner Anwendun-
gen. In großen Systemen kann die nachlassige Verwendung von Typen eine potentielle
Fehlerquelle sein. Beispielhaft wird dies in Listing 1 dargestellt.
1 <?php var dump (
2 0 == nu l l , // boo l ( t r u e )
3 ’ 0 ’ == 0 , // boo l ( t r u e )
4 ’ 0 ’ == n u l l // boo l ( f a l s e )
5 ) ;
Listing 1: schwache Typisierung in PHP
1.3 Entwicklungsumgebung
Eine typische Umgebung fur PHP Anwendungen ist das Betriebssystem Linux, ein
Apache Webserver und eine MySQL Datenbank. Auch wenn viele PHP Frameworks
versprechen, dass sie unter verschiedenen Umgebungen fehlerfrei ausfuhrbar sind, wur-
2
de in dieser Arbeit explizit die bereits angesprochene Konstellation von Linux, Apache
und MySQL berucksichtigt. Die Irrelevanz welches dieser Programme verwendet wird,
zeigt sich darin, dass die Framworks keine Abhangigkeiten hierzu vorweisen. Im Weite-
ren fallt die Entscheidung zu dieser Zusammenstellung, da sie wie auch PHP und alle
betrachteten Frameworks aus quelloffener Software besteht. Unterschiede fur den Ent-
wickler sind ebenfalls nicht gegeben, da PHP keine vom Betriebssystem oder Webserver
abhangigen Eigenheiten aufweist.
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 Vorzuge von PHP Frameworks
aufzuzeigen und einen Uberblick uber aktuell relevante PHP Frameworks zu schaffen.
Zu jedem der gewahlten Frameworks ist eine Kurzbeschreibung der Besonderheiten
verfasst, wobei drei ausgewahlte Frameworks unter Kapitel 4 im Detail betrachtet
werden. Es handelt sich hierbei um symfony, Yii und das Zend Framework. Um prio-
risiert und gewichtet Kriterien zu einer Projektumsetzung mit Hilfe eines der drei
gewahlten Frameworks darzustellen, findet sich am Ende dieser Arbeit eine Entschei-
dungshilfe in Form einer Entscheidungsmatrix. Mit dem Gedanken fur jede Aufgabe
das richtige Werkzeug zu finden, kann mit einer Projektspezifikation ein Framework
gewahlt werden.
1.5 Warum ein PHP Framework verwenden?
“The idea behind a framework is to offer a design you can use across multiple ap-
plications. 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 inter-
face code or presentation-layer interfaces and more time writing the application itself.”
[IBM10]
Das Prinzip der Wiederverwendbarkeit von Software ist eines der wesentlichen Kri-
terien. 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 erstrebens-
wert, da somit ein weitaus effizienteres und okonomisches Arbeiten ermoglicht wird.
Neben einer Software Bibliothek, welche eine konkrete Funktion verfolgt, gibt es Soft-
ware Frameworks, die eher allgemeine Funktionalitat abdecken. “Das Framework als
Hauptprogramm ist der Rahmen. Es stellt Schnittstellen bereit, in die Benutzer ihre
eigenen Codeteile einhangen konnen. Das Framework wird gestartet und kann die indi-
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 unterstutzt die Verwendung den
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 selbststandig
ohne weitere Einschulung durchfuhren. Von der Erfahrung langjahriger PHP Entwick-
ler konnen unerfahrene Programmierer profitieren. Sie arbeiten in einer strukturierten
Umgebung, lernen aus Beispielen und mussen nicht erst selbst eine Basis fur Projekte
schaffen. Um wiederkehrende Aufgabenstellungen mit vorgefertigten Losungen zu ver-
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 Funktionalitat implementieren, die ein konkretes
Problem verarbeitet. Erweiterungen werden meist nicht von den Frameworkentwick-
lern selbst entwickelt, sondern von einem mit der Funktionalitat vertrauten Program-
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 erhohten Anfor-
derungen gerecht werden. Ein PHP Framework sollte nachfolgende Kriterien erfullen.
• Qualitat, Stabilitat und Sicherheit - Da die zu entwickelnde Software auf einem
Framework beruht, sind Qualitat, Sicherheit und Stabilitat drei der wichtigsten
Kriterien. Ein umfangreiches und moglichst vollstandiges Testframework soll-
te dem Kern des PHP Framework selbst angefugt sein, um Entwicklungsfehler
moglichst fruh und moglichst schnell bestimmen zu konnen. Sicherheitslucken
in der Kernsoftware bedeuten ein hohes Risiko. Erfahrene Internetuser konnen
das Framework vieler Webseiten durch ihre wesentlichen Merkmale bestimmen.
4
Wenn bereits Sicherheitslucken der Offentlichkeit bekannt sind, besteht die Ge-
fahr, dass einer dieser kundigen Besucher diese Lucke missbraucht. Durch eine
große Anzahl von Benutzern und einer weitlaufigen Verbreitung werden Fehler im
Kernsystem eher gefunden, somit tragt auch dies maßgeblich zur Verbesserung
eines Frameworks bei. Naturlich soll auch die am Framework entwickelte Soft-
ware gepruft werden, sofern die geeigneten Tools hierfur zur Verfugung stehen.
“quality. The degree to which a system component, or process meets specified
requirements.” [oEE90]
• Performance - Das Framework sollte die eigentliche Anwendung nicht merk-
bar beeinflussen, durch den großen Funktionsumfang ist dies aber nur schwer
durchfuhrbar. Neben der Optimierung des Kernquellcodes sind Caching Mecha-
nismen unabdingbar. Diese sind eine gunstige Alternative zum Hardwareupgrade
des verwendeten Webservers um eine Leistungssteigerung durchzufuhren. Hierbei
gibt es diverse Vorgehensweisen wie das Zusammenfassen von Quellcode Datei-
en oder das Zwischenspeichern von statischen Inhalten. Außerdem gibt es eine
Reihe von Erweiterungen fur PHP selbst, die automatisiert auf PHP angewendet
werden konnen. Unter die bekanntesten zahlen hier der Alternative PHP Cache,
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]
• Aktualitat/Weiterentwicklung - Die Webentwicklung erweist sich als sehr schnell-
lebig. Fur Frameworkentwickler ist es notwendig, fur neue Moglichkeiten offen
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 erwahnt wurde, sind erst mit PHP5 wichtige
Konzepte der objektorientierten Programmierung in die Sprache aufgenommen
worden. In einigen PHP Frameworks wird eine Abwartskompatibilitat zu PHP4
beworben, da die Software auf Webservern mit PHP4 wie auch PHP5 verwendet
werden konnen. Diese Kompatibilitat kann naturlich nur erreicht werden, indem
auf PHP5 verzichtet wird. Implizit sind dadurch naturlich keine der Vorzuge von
PHP5, innerhalb des Quellcode des Framework, enthalten. Daruber hinaus kann
man eine vollige Uberarbeitung oder sogar eine Einstellung der Weiterentwick-
lung erwarten.
5
• Funktionsumfang - Angebotene Funktionalitat ist nur sinnvoll, solange diese all-
gemeine Aufgaben erfullt und keine Spezialfalle abdeckt. Die Abgrenzung und
bedachte Auswahl stellt einen erhohten Stellenwert dar, da mehr Quellcode auch
zugleich Performance- und Qualitatsverlust mit sich bringt. Anders betrachtet,
ist es naturlich nicht sinnvoll, jede Aufgabe in Erweiterungen anzubieten. Kern-
funktionalitat ist klar erkennbar, sobald viele Erweiterungen haufige Abhangig-
keiten dazu entwickeln.
• Erweiterung - Entsteht ein Stuck Code, welches man gut in weiteren Projekten
wiederverwenden kann, so ist es notwendig, dies vom restlichen Code zu losen.
Hierfur werden innerhalb von Frameworks Erweiterungen angeboten. Bezeichnet
werden diese als Module, Extensions oder Plugins. Dadurch entsteht eine Er-
weiterbarkeit durch Dritte, eine durch die Community verfasste Ausweitung der
Funktionalitat. Die Erweiterungen stellen eine Moglichkeit dar, unabhangig von
der Kernsoftware neue Losungen fur diverse Aufgaben zu schaffen. “extenda-
bility. The ease with which a system or component can be modified to increase
its storage or functional capacity.” [oEE90]
• Unabhangigkeit/Flexibilitat - Uber PHP hinaus muss das Framework eine Schnitt-
stelle zu den weiteren Komponenten einer Webapplikation liefern. Die wichtigsten
sind hierbei Schnittstellen zu Datenbank, Javascript- und Template-Integration.
Seit Einfuhrung von PDO, den PHP Data Objects, ist es wesentlich einfacher
geworden, die haufigsten Datenbanken zur freien Auswahl in einer Applika-
tion anzubieten. “PDO aims to supply an uniformed API of common func-
tions for most relational databases. This greatly simplifies the PHP process
(through the package differences in a common API to support different databa-
se) development.”[CHLJ09] Wie in PHP gibt es auch in Javascript Frameworks,
die Webanwendung einfach integriert werden konnen. Eine Auswahl, welches Ja-
vascript Framework dies ist, sollte dem Entwickler freigestellt sein. “flexibility.
The ease with which a system or component can be modified for use in applica-
tions 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 moglich sein, sich leicht eine Ubersicht schaffen zu
6
konnen. Nur so kann man vorweg schon entscheiden, ob denn auch die richtige
Wahl getroffen wurde. Hierbei helfen oft verwendete Kurzanleitungen fur kleine
Webprojekte wie die Erstellung einer einfachen Blog Anwendung. Ist der erste
Schritt einmal gewagt, liegt ein hoher Stellenwert auf Umfang und Vollstandig-
keit der Dokumentation. Ahnlich einer FAQ Liste werden oft Sammlungen von
Tutorial oder How-To, fur Aufgaben, die wiederholt auftreten, erstellt. Innerhalb
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 Abtren-
nung dieser Bereiche kann man sich zu Nutzen machen, indem Datenbank-, PHP- und
Layoutentwickler im Idealfall parallel zueinander die Umsetzungen durchfuhren. Diese
strikte Trennung gibt einerseits einen variablen, doch andererseits auch sehr vorge-
gebenen Aufbau einer Applikation vor. Intuitiv fallt die Entscheidung, welchen Platz
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 wahlen ist und weist diesem die Anfrage zu. Jeder
Controller verfugt uber eine Reihe von Actions, eine die der Anfrage entsprechenden,
wird gewahlt und ausgefuhrt. In diesem Bereich erzeugt der Controller bei Bedarf eine
Verbindung zum Model, speichert oder fragt Daten ab. Der Controller wahlt abhangig
vom Verlauf seiner Abarbeitung einen View, ubergibt diesem etwaige Daten und fuhrt
diesen aus.
2.2 CRUD
Es gibt vier Aktionen, die in Bezug auf ein Model ausgefuhrt werden konnen: das Model
zu erstellen, Informationen zu lesen, das Model zu verandern und es zu loschen. Man
spricht von einem CRUD Modell. CRUD steht fur Create, Read, Update und Delete,
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 enthalt die vier Methoden des CRUD Modell.
Typischerweise werden Create und Update als Formular in einem View dargestellt. Der
View fur Read stellt die Informationen des Model in HTML dar. Fur die Ausfuhrung
von Delete ist nicht zwingend ein eigener View notig. Meist wird hier innerhalb des
Controller eine Weiterleitung zu einer anderen Action - wie einer Listenansicht des
8
Abbildung 1: MVC Modell
Model - gewahlt.
2.3 Datenstrukturen
Die vorrangigste Struktur bei Datenbanken von Webapplikationen bildet das Entity-
Relation Model. Das Modell hat eine starke Verbindung zur objektorientierten Pro-
grammierung. Eine Tabelle speichert diverse Daten innerhalb der Tabellenspalten mit
Attributtyp Zahl, Text oder Datum. Das Abstrahieren ist denkbar einfach, ein Mo-
del ist eine Klasse dieser Tabelle, dessen Attribute die Tabellenspalten wiederspiegelt.
Die Relationen, die in Abbildung 2 dargestellt werden, konnen auf folgende Arten
eingeschrankt werden[QZ10]:
• 1..n oder One-to-Many Beziehung, bezeichnet die Relation zwischen zwei Tabel-
len. Beispielsweise sind einem Benutzer viele Eintrage zuzuordnen, in umgekehr-
ter Form jedoch besitzt jeder Eintrag genau einen Benutzer.
• 1..1 oder One-to-One Beziehung, stellt einen Spezialfall der One-to-Many Bezie-
hung dar. Hierbei haben beide Tabellen hochstens einen zugehorigen Eintrag in
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 vie-
len Kategorien gehort und eine Kategorie jeweils wieder viele Eintrage haben
kann, dann wird eine Many-to-Many Beziehung benotigt. Dies kann man als
eine Verbindung von One-to-Many Beziehungen der beiden Tabellen uber eine
Zwischentabelle sehen. Eine Kategorie hat somit viele Eintrage, wie auch ein
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 wahrend
der Laufzeit bestimmt werden. Somit ist es moglich, die Datenbank abzuandern, ohne
entsprechende Anpassungen im Quellcode vornehmen zu mussen. Der Performance
Verlust ist gering, nur beim ersten Zugriff auf das Model werden die Tabellen bzw.
10
Modelinformationen ausgelesen. Dies bedeutet eine zusatzliche Datenbankabfrage pro
Model.
2.4 RAD
RAD steht fur Rapid Application Development und bezeichnet ein von Prototypen ge-
triebenes Entwicklungsmodell in der Softwareentwicklung. Durch Code Generierungen
sowie dem CRUD Modell wird dies begunstigt. Uber das Model wird bei der Generie-
rung ein vollstandiger und ausfuhrbar CRUD Pfad erstellt. Die entsprechenden Con-
troller und Views werden erzeugt. Der Entwickler kann auf dieser Vorlage die weitere
Funktionalitat nach und nach einarbeiten. Im RAD ist eine schrittweise Entwicklung
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 fur eine objektive Zusammenstellung wird nach den in Kapitel 1.6
genannten Kriterien eine Recherche durchgefuhrt. Nachdem ein wesentlicher Faktor
eine große Verbreitung bzw. breite Community darstellt, konnen alle Frameworks,
die nicht mit einfachen Suchanfragen mit diversen Internet-Suchmaschinen gefunden
wurden, vorweg ausgeschlossen werden. Nachfolgend wird keine vollstandige Liste al-
ler verfugbaren PHP Frameworks aufgezeigt, jedoch liefert diese einen ausreichenden
Uberblick uber alle aktuell relevanten Frameworks.
3.1 Adventure PHP Framework (APF)
Das Framework bedient sich anerkannten objektorientierten Design-Pattern und bie-
tet bereits eine Vielzahl von Losungen fur bekannte Problemstellungen. Auf Tools zur
automatischen Code Generierung wird mit Absicht verzichtet, außerdem werden erwei-
terte Konfigurationen im Normalfall vermieden. Als Verbindung zu einer Datenbank
ist eine eigens entwickelte Object-Relational-Mapping Losung angeboten. Hierbei muss
der Entwickler fur jedes Model die Konfiguration einer INI-Datei vornehmen und des-
sen Datenstruktur dort abbilden. Uber diese Konfiguration abstrahiert das Framework
Zugriffe auf Daten. Quellcodes fur Model Klassen sind allerdings nicht mehr notwen-
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 Ac-
tive 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 Attribu-
ten bei den Models. Diese erfolgt uber eine Konfigurationsdatei welche ein Datenbank
Schema abbildet und die Attributtypen uber den Attributnamen errat. Akelos bewirbt
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 Frame-
work nach dem MVC Modell. In diesem Framework findet sich an einigen Stellen das
“Convention over Configuration” Prinzip wieder. Dieses soll dem Entwickler Konfigu-
rationsarbeit erleichtern, solange sich dieser an einige Konventionen halt. Zum Beispiel
konnte man auf die Zuordnung eines Model zur passenden Datenbanktabelle verzich-
ten, indem Tabellen- und Klassenname des Model die Konvention erfullen. Die Soft-
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 fur Einsteiger empfiehlt sich das Codeigniter Framework. Es bietet einen
schnellen Einstieg und ist im Umfang eher gering. Das Framework kann auch mit PHP4
verwendet werden, sodass auch altere Hostings verwendet werden konnen. Der geringe
Umfang spiegelt sich auch im Angebot der Funktionalitat wieder. Fur unerfahrene
Entwickler liefert diese Framework eine Moglichkeit zum einfachen Einstieg in die
Entwicklung von Webanwendungen, ohne aus einer Vielzahl von objektorientierten
Konzepten auswahlen zu mussen. Die offizielle Dokumentation ist, zum Nachteil des
Framework, schlecht strukturiert und durftig.
Website: http://www.codeigniter.com/
Aktuelle Version: 1.7.2
3.5 eZ Components
“Die eZ Components stellen ein Komponenten-basiertes Framework dar, dessen Ele-
mente auch unabhangig voneinander und in Kombination mit den Bibliotheken ande-
rer Anbieter nutzbar sind. Sie bilden damit eine Alternative etwa zum PEAR-Projekt.”
[WiE10] Der wohl großte Vorteil in der Verwendung dieses Framework ist die Tatsache,
13
dass Komponenten, also gebundelte Funktionspakete auch vollstandig getrennt vonein-
ander verwendet werden konnen. Die Dokumentation bietet einen schnellen Einsteig,
ist vollstandig und sehr detailiert. eZ Components benotigt mindestens PHP in Versi-
on 5.2.1, eine durchaus akzeptable Aktualitat der Skriptsprache.
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-Management-
System, 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 unterstutzen. Das Framework zielt speziell auf klei-
ne Entwicklerteams ab. Außerdem muss ein zu entwickelndes Projekt den notwen-
digen Spielraum in den Spezifikationen mit sich bringen, um diversen Eigenheiten
adaptiert werden zu konnen. Ein bereits vorgegebener Administrationsbereich bietet
oft gebrauchte Features wie Benutzer-, Navigations- oder Templateverwaltung. Durch
diese Vorgaben eignet sich das Framework auch nur fur Administrator basierte Appli-
kationen. Die Dokumentation ist in einem Wiki gehalten, wenig umfangreich und wird
hauptsachlich durch Beispiele erklart.
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 vollig neu programmiert und kann nun auch fur stabile, große
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 Kompatibilitat zu PHP 4 sehen, an einer
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 franzosischen Webagentur Sensio Labs hergestellte System wurde entwor-
fen, um eine Basis fur eigene Entwicklungen zu schaffen. Spater wurde die Entscheidung
gefallt, das Framework der Offentlichkeit zuganglich zu machen. Dieser Schritt hatte ei-
ne außerst schnelle Verbreitung und ebenso zugige Weiterentwicklung zur Folge. Beson-
dere Bedeutung legt symfony auf eine Unabhangigkeit der verwendeten Komponenten.
Sogar die Datenbankabstraktion ist lose an das Framework gekoppelt. Außerdem sind
Teile des Frameworks auch als eigenstandige Komponenten verfugbar. Mit Dezember
2010 soll Version 2 veroffentlicht werden. Hierbei soll eine vollstandige Uberarbeitung
von symfony aus den bisherigen Erfahrungen der letzten vier Nebenversionen entste-
hen.
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 fur Einsteiger nicht
empfehlenswert. Die Verwendung empfiehlt sich fur Softwareentwickler, welche zuvor
bereits Webanwendungen in Ruby on Rails verfasst haben und noch keine Erfahrung
mit PHP vorweisen konnen.
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 Janner 2008 wurde der Grundstein von Qiang Xue,
einem ehemaligen Entwickler von Prado, siehe Kapitel 3.7, fur das noch recht junge
PHP Framework gelegt. Vorgegeben wird in Yii, jQuery als Javascript Framework so-
wie ein standardmaßiges Seitenlayout. Beides findet sich auch in diversen funktionalen
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 erwahnten Firma Zend Tech-
nologies Ltd entwickelt. Die Software kann als eine ungebundene Ansammlung an
Komponenten gesehen werden, was die Flexibilitat bedeutend erhoht. Daruber hinaus
stellt es im Gesamten ein vollwertiges Framework mit MVC Architektur dar. Eine
markante Auffalligkeit bei Zend Projekten sind die Namenskonventionen. Dateipfad,
Modul und Funktion einer Klasse bestimmen deren Benennung. “These conventions
define a pseudo-namespace mechanism for Zend Framework. Zend Framework will ad-
opt the PHP namespace feature when it becomes available and is feasible for our de-
velopers to use in their applications.” [ZEN10] Fur erste Schritte erhalt man auf der
offiziellen Webseite einen Quickstart Guide. Weiterfuhrend kann man - bezogen auf die
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 konnte von dem, bereits in PHP Version 5.3 enthaltenen,
neuen Konzept der Namespace abgelost werden. Weiters findet sich die Template En-
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. Fur Dezember 2010 ist
die Veroffentlichung einer uberarbeiteten Version 2 geplant, wobei diese die bisherige
Verwendung von PHP4 losen wird.
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 Fra-
mework fur eine genauere Betrachtung ausgewahlt. Die Frameworks weisen deutliche
Unterschiede auf, sind in ihrem Aufbau ahnlich und bieten ausreichend Dokumentati-
on. Alle drei Projekte sind nach der MVC Architektur entwickelt, aus diesem Grund
erfolgt ein allgemeiner Vergleich, im Folgenden aufgeteilt in Model, View und Control-
ler.
4.1 Model
Im Falle eines Yii Framework wird die Erzeugung der Datenbank dem Entwickler auf-
erlegt. Nachdem die Struktur geschaffen und mogliche Erstdaten eingespielt wurden,
beginnt die eigentliche Umsetzung des entsprechenden Model. Abgeleitet wird dieses
direkt von der allgemeinen Klasse CActiveRecord, welches, wie der Name schon sagt,
die Funktionalitat des Active Record Patterns wiedergibt. Typische weitere Anpassun-
gen erfolgen mit Angabe zur Regelung der Validierung, Relationen sowie der allgemei-
nen 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 Bi-
bliothek zur Datenbank Abstrahierung. Hierbei kann die Datenbankstruktur aus einer
XML oder YAML Schema Defintion generiert werden. Es besteht ebenfalls die Moglich-
keit, diese Schema Definitionen aus einer vorgegebenen Datenstruktur zu generieren.
Der Vorteil ist hier ganz klar fur Entwickler gegeben, die keine Erfahrungen mit der Er-
zeugung von Datenbanken aufweisen konnen. Dem Entwickler wird nach erfolgreicher
Ausfuhrung des Prozesses zur Erzeugung der Datenbank eine Umgebung generiert,
die bereits funktionstuchtige Models zu den Datenbanktabellen enthalt. Der Aufbau
erfolgt in hochster Ebene uber zwei Klassen. Eine Klasse dient zur direkten Reprasen-
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 zuruck.
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 enthalt, abgeleitet. Diese stellt allgemeine Methoden
zur Datenverwaltung im CRUD Modell zur Verfugung, allerdings halten sich diese
sehr beschrankt in ihrer Funktion. Jegliche Erweiterung obliegt dem Entwickler, dies
birgt einerseits mehr Zeitaufwand, verringert jedoch Funktionalitat des Model auf die
tatsachlich benotigte.
4.1.1 Beispielcode
Listing 2 zeigt einen praktischen Vergleich der Ausfuhrung eines Datenerhalt uber ein
Model.
1 <?php
2 // Y i i Model User ( u s i n g i n t e r n a l CAct iveRecord )
3 $u s e r=User : : model ( )
4 −> f i n d ( ’LOWER(name)=? ’ ,
5 array ( CHttpRequest : : getQuery ( ’ name ’ , ’ gue s t ’ ) )
6 ) ;
7
8 // symfony Model User ( u s i n g component Doc t r i n e )
9 $u s e r = Doc t r i n e : : ge tTab l e ( ’ User ’)−>findOneByName (
10 $ t h i s−>ge tReques t ()−>getParamete r ( ’ name ’ , ’ gue s t ’ )
11 ) ;
12
13 // Zend Model User
14 $usermapper = new App l i ca t i on Mode l Use rMappe r ( ) ;
15 $u s e r = new App l i c a t i o n Mode l U s e r ( ) ;
16 $usermapper−>f i ndOneByLabe l (
17 $ t h i s−>ge tReques t ()−>getParam ( ’ name ’ , ’ gue s t ’ ) ,
18 $u s e r
19 ) ;
Listing 2: Model im Vergleich
19
4.1.2 Zusammenfassung
Ubersichtlich betrachtet, bekommt man mit Yii eine schnelle und einfache Moglichkeit
Daten zu verwalten, bei der eine Konfiguration kaum notwendig ist. Die Tabellenat-
tribute werden wahrend der Laufzeit im Model vermerkt. Vollig gegensatzlich passiert
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 Moglichkeit, die
Datenbank selbst direkt uber das angelegte Schema zu erzeugen. Spezialfalle konnen
sich schnell zu einer Herausforderung entwickeln. Viel Eigenarbeit verspricht das Zend
Framework. Es wird lediglich die Erstellung einer Basisklasse ohne jegliche Methoden
unterstutzt. Die Datenbank Erzeugung sowie die vollstandige Anpassung des Model
erfolgen vom Entwickler ohne weitere Hilfe des Framework. Dies benotigt einiges an
Mehraufwand, verspricht jedoch eine Aufgaben orientierte Losung.
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 Layoutstucke in Views
einzubinden, kann auf sogenannte Partials zuruckgegriffen werden. Diese vereinfachten
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 zugehorige Funktionalitat ausgefuhrt werden
muss. Zu diesem Zweck sind in Yii sogenannte Widgets eingefuhrt. Sie erweitern ein
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 geson-
derten Konfiguration kann jeder View einfachen Rahmenbedingungen angepasst wer-
20
den. Das Prinzip der Partials ist auch in symfony enthalten. Ein durch Funktionalitat
erweitertes Partial bezeichnet ein Component. Diese werden zwar ahnlich wie Actions
definiert, jedoch werden sie indirekt uber die Integration in einem View ausgefuhrt.
Slots sind ein weiteres Konzept innerhalb der Prasentationslogik von symfony. Ein Be-
reich innerhalb des Haupttemplate muss mit einem eindeutigem Bezeichner versehen
werden. Dieser Bereich definiert einen Slot und kann nun aus jedem View angesprochen
und befullt werden.
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 emp-
fohlene Vorgehensweise findet sich jedoch in den offiziellen Einfuhrungen.
4.2.1 Zusammenfassung
Eine Applikation ohne Layout Vorstellungen profitiert von dem vorgefertigten Stan-
dard 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 Modularitat und Wiederverwendbarkeit innerhalb der Prasentationslogik. Eine
zusatzliche Konfiguration verspricht einfache und schnelle Anpassungen. Dem Zend
Framework steht abermals mehr Flexibilitat, jedoch auch ein erhohter Entwicklungs-
aufwand gegenuber.
4.3 Controller
Die Abarbeitung der Kontrolllogik unterscheidet sich innerhalb Yii, symfony und Zend
nicht wesentlich. Eine vom Basis Controller abgeleitete Klasse steuert die gespeicher-
ten Actions. Die Wahl des Controllers basiert auf der Route des HTTP-Request. Diese
kann in den Konfigurationen abgeandert werden. So ist es einfach, eine Standard Action
festzulegen. Ein typisches Beispiel sei folgendes. Ein Controller ermoglicht den Infor-
mationszugriff auf Filme, die entsprechende Liste oder Ubersichtseite, entspricht der
Route http://www.example.com/index.php/movie/index. Einfache Konfigurationen,
mit Unterstutzung der URL-Rewrite Technik des Webservers, erlauben eine Anpas-
sung der dargestellten Route. Im genannten Beispiel konnte dies zu einer gewunschten
21
Route wie http://www.example.com/movies.html fuhren. Diese ist sowohl fur den Be-
sucher als auch fur Suchmaschinen aussagekraftig und lesbar.
4.3.1 Zusammenfassung
In allen drei Frameworks erfolgt die Ausfuhrung der Kontrolllogik in sehr ahnlicher
Weise. Der HTTP Request wird mit speziellen Parametern festgelegt, welche die aus-
zufuhrenden Controller und Action eindeutig wiedergeben. Innerhalb der Action wird
samtliche Prozesslogik ausgefuhrt, bei Bedarf Daten via Models eingeholt und diese
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 fur den Besucher in
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 unterstutzt diese Vorgehensweise mit den notwendigen darstellbaren Ele-
menten.
Yii liefert mit der Klasse CHtml ein Sammlung von haufigen HTML Elementen,
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 erganzt werden mussen.
Innerhalb von symfony gibt es ein ahnliches Konstrukt mit Namen sfForm. Hierbei
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 Uberprufung von Eingabedaten kann die
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 fur den Besucher in verschiedenen Sprachen aufbereitet
werden kann, ohne Anderungen an der Umsetzung vornehmen zu mussen. Lokalisie-
rung entspricht demselben Prinzip, jedoch zielt dies auf die Formatierung von Dar-
stellungen wie eines Datum oder einer Nummer vor. Die gebrauchliche Kurzform fur
Internationalisierung ist i18n, fur Lokalisierung i10n. Das MVC Modell liefert einen
besonderen Vorteil. Nach Konvention sind alle anzuzeigende Texte innerhalb der Dar-
stellungslogik, dem View enthalten. Naturlich konnen auch gespeicherte Daten in ver-
schiedene Sprachen vorliegen. Die Verarbeitung erfolgt in diesem Fall uber das Model.
Das Yii Framework bietet fur die Ubersetzung innerhalb des View eine allgemein
zugangliche Methode. Die Ubersetzungen selbst werden in einfachen Textdateien hin-
terlegt. Fur die Lokalisierung stehen einige Helfer-Klassen zur Verfugung, die bei Be-
darf geladen werden konnen.
Innerhalb von symfony sowie im Zend Framework ist ein sehr ahnlicher Aufbau zu
verzeichnen. Uber Helfer-Methoden werden Texte und Formatierungen umgewandelt,
die Ubersetzungen sind in Text-Dateien gespeichert. Zusatzlich wird in symfony die
Mehrsprachigkeit von Datenhaltung in der Datenbank berucksichtigt.
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 Ausfuhrung einer Action veranlasst, sucht dieser nach
der bereits zuvor generierten Darstellung. Wird ein entsprechender HTML Code ge-
funden, so ersetzt dieser die Ausfuhrung der Action. Die Antwort kann schneller an
den Benutzer erfolgen und der Webserver wird durch die gesparte Rechenarbeit ent-
lastet. Der Cache, also die bereits vorgefertigten HTML Stucke, werden in Dateien,
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
konnen Informationen an eine Cache Komponente ubergeben und uber eine eindeu-
tig vergebene Identifikation auch wieder abgeholt werden. Innerhalb des View konnen
uber den Fragment Cache Inhaltselemente festgelegt werden, die nicht bei jedem Auf-
23
ruf ausgefuhrt werden mussen. Die Verwaltung der Speicherung fuhrt das Framework
selbst durch. Die Zwischenspeicherung einer gesamten Webseite erfolgt uber den Page
Cache. Dieser kann im Controller konfiguriert werden und bedarf keiner weiteren An-
passungen. Zu allen Cache Typen kann man eine Lebensdauer, also einen Zeitrahmen,
oder andere Rahmenbedingung zur Gultigkeit festlegen.
Das symfony Framework bietet zu den Komponenten des View Modell einen Ca-
ching Mechanismus. Eine Action, ein Partial, ein Component oder ein Slot konnen zur
Zwischenspeicherung zugewiesen werden. Dies erfolgt in einer exklusiv dafur vorgese-
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 Mecha-
nismen in einer Webapplikation zu integrieren. Die Zwischenspeicherung erfolgt, wie
bereits bei Yii kennengelernt, uber eine Identifikation mit zusatzlich definierter Le-
bensdauer. In der offiziellen Dokumentation findet sich ein ausreichende Einfuhrung
zur Erstellung einer Caching Umgebung, eine vorgefertigte Losung gibt es von Seiten
Zend jedoch nicht.
4.4.4 Testen
Fur eine komplexe Anwendungen, oder Applikationen denen eine hohe Stabilitat oder
Sicherheit abverlangt wird sind automatisierte Tests notwendig. “Automatisierter Test
bedeutet, dass die Testfalle mit Hilfe eines Werkzeugs und ohne weiteres Zutun eines
menschlichen Testers aufgerufen, durchgefuhrt und mit den Sollergebnissen verglichen
werden. Die hohe Forderung, alle unit tests standig durchzufuhren, ist ohne Automa-
tisierung nicht zu erfullen.” [Sch07] Man unterscheidet zwischen Modul und System
Test. Bei einem Modultest wird eine separiert ausfuhrbare Funktionalitat, wie bei-
spielsweise eine Methode, auf ein korrektes Ergebnis gepruft. Die Vorgehensweise ist
so, dass moglichste viele und unterschiedliche Eingaben mit den korrespondierend rich-
tigen Ausgaben verglichen werden. Haufig wird fur Modultest auch die englische Be-
zeichnung Unit-Test verwendet. Die zweite, gelaufige Vorgehensweise sind ein System
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 Ausfuhrung eines Test
auch automatisiert in einem simulierten Browser. Getestet werden einzelne Aktionen,
24
die mit der Anwendung durchfuhrbar sind. Eine vollstandige Abdeckung ist in diesem
Fall nicht das Ziel, meist auch gar nicht durchfuhrbar. Wichtig ist jedoch das Testen der
Hauptfunktionalitat sowie weiterer kritischer Sicherheitsbereiche wie Benutzer Login
oder mit Benutzerrechten versehene Bereiche. Ist erstmals eine Basis an Tests geschaf-
fen, so kann nach jeder Neuerung eine Ausfuhrung dieser erfolgen. Auf diesem Weg
sind Fehler in komplexen Abhangigkeiten leichter zu aufzufinden. Neben der Moglich-
keit, mit Hilfe von Tests die Sicherheit und Stabilitat eines Webprojekt zu erhohen, ist
es auch eine gute Losung, als Vorgehensmodell eine Test-getriebene Entwicklung zu
wahlen. Eine Teilspezifikation wird gewahlt, die entsprechenden Tests eingepflegt. Bei
der Ausfuhrung der automatisierten Uberprufung schlagen diese fehl. Dem Program-
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 Rohgerust von Klassen
fur Modul- wie auch Funktionstests. Diese sind dem Model entsprechend aufgebaut und
konnen als Vorlage direkt verwendet werden. Modultests werden uber PHPUnit, ein
in der Programmbibliothek PEAR frei verfugbaren Testframework, durchgefuhrt, fur
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.
Fur Modultest wurde in symfony eine eigene Umgebung mit Namen Lime geschaffen.
Beabsichtigt wurde eine verbesserte Lesbarkeit sowie eine unabhangige Testumgebung.
Die Verwendung und Ausfuhrung passiert analog zu dem in Yii verwendeten PHPU-
nit Framework. Auch fur die simulierte Ausfuhrung in einem Webbrowser wurde eine
eigene Applikation erzeugt. Uber die sfBrowser PHP Klasse kann ein Umgebung er-
zeugt und mit dessen Methoden eine Ausfuhrung nachgespielt werden. Der Nachteil
an der Ausfuhrung in dieser Variante ist, dass kein Client-Seitiger Code wie Javascript
ausgefuhrt werden kann. Hierzu empfiehlt smfony ebenfalls selenium. “The solution is
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 win-
dow. 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 beschrankt sich auf Modultest und leitet diese von PHPUnit
ab. Erweitert wird dies noch mit einer vereinfachten Moglichkeit zur Benutzung von
25
Testdatenbanken. Funktionale Test finden im Zend Framework keinen Einzug. Eine
Verwendung von Selenium, wie in den Beispielen zuvor, ist naturlich moglich, im Zend
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. Unterstutzt wird dies noch davon, dass bei der
automatisierten Generierung der Models auch die zugehorigen Rohgeruste zum Tes-
ten erzeugt werden. Neben den Testen gibt es eine Reihe von Techniken, um Sicher-
heitslucken vorzubeugen, zwei davon werden nachfolgend diskutiert.
So beschreibt Output Escaping eine Strategie, durch Benutzer erfolgte Eingaben
so aufzubereiten, dass dieser keinen Schadcode einschleusen kann. Das Prinzip der
Nutzung einer Sicherheitslucke bei der Ausgabe bzw. auch Ausfuhrung von benut-
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 gehoren in
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 samtliche an den
View gelieferten Daten bereits von potentiellem Schadcode entfernt wurden.
Eine ahnliche Vorgehensweise erzeugen SQL Injections. Parameter eines HTTP-
Request, welche bei der Erzeugung von dynamischen Webseiten notwendig sind, wer-
den vom Angreifer so abgeandert, dass dieser in die Kommunikation zur Datenbank
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 verfugbaren Lernmethoden. Auf
der Website von Yii werden lediglich zwei Tutorials, eine allgemeine Einfuhrung, eine
Cookbook Sammlung, zwei Screencasts sowie Cheatsheets angeboten. Der Umfang
26
dieser Dokumentation ist auf den ersten Blick sehr sparlich, liefert jedoch einen guten
und strukturierten Einblick in das Framework und in vielen Bereichen auch daruber
hinaus. Das erste Buch zu Yii wurde wahrend bzw. kurz vor Abschluss dieser Arbeit
veroffentlicht.
Die franzosische Firma Sensio Labs, Hauptentwickler von symfony, liefert eine Reihe
von Buchern, die auf symfony abgestimmt sind. Diese sind auf der offiziellen Websei-
te auch als kostenlose Druckversion verfugbar. Neben diesen gibt es, durch die sehr
große Community, eine Vielzahl an How-Tos und Tutorials. Als zusatzlichen Bonus
veroffentlicht symfony jedes Jahr zur Weihnachtszeit eine 24 Stunden Dokumentation,
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 fur Entwickler, von der Firma Zend Technologies Ltd. beworben. Ein vollstandige
Ubersetzung liegt in Deutsch, Franzosisch, Japanisch, Russisch und Chinesisch vor.
Multimedial werden Podcasts, abonnierbare Mediendaten und Webinars, sowie Semi-
nare uber das World Wide Web angeboten. Daruber hinaus gibt es von der Entwick-
lungsfirma angebotene Trainings, Consultings und Zertifizierungen.
27
5 Zusammenfassung und Ausblick
Die in Kapitel 4 gepruften Frameworks sind eine gute Basis fur Webapplikationen. Aus
den Kriterien in Kapitel 1.6 ergibt sich eine zufriedenstellendes Ergebnis. Qualitat, und
Stabilitat bieten die Frameworks uber Tests, siehe Kapitel 4.4.4, und liefern auch Vor-
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
zusatzlich mit den in Kapitel 4.4.3 angesprochenen Cache Methoden unterstutzt. Zend
und symfony haben Ihre Komponenten lose an das Framework gekoppelt, sodass diese
auch ohne dem Framework selbst in einem Web Projekt eingebunden werden konnen.
Dies liefert den Frameworks eine bedeutende Unabhangigkeit sowie auch Flexibilitat.
Yii hat vordefinierte Abhangigkeiten, die erst durch entsprechende Konfigurationen
ausgeblendet werden. Außerst umfangreich zeigen sich die Dokumentation, der Funk-
tionsumfang sowie die Erweiterung.
Durch die bereits mehrmals angesprochene kleine Community des Yii Framework,
der eher geringen Anzahl an Erweiterungen sowie Abhangigkeiten innerhalb der Soft-
ware, eignet sich das Framework nicht fur große Webapplikationen. In der Umsetzung
von kleinen Projekten wiederum bietet Yii einige Vorteile - wie ein vorgefertigtes Lay-
out und funktionsbereiten Teilstucken.
Mit einer bedeutenden Verbreitung ist symfony ein ideales Werkzeug, um mittlere
bis große Webapplikationen zu erzeugen. Fur kleinere Web Projekte ist der anfangliche
Aufwand bis zur Basis einer Applikation wohl nicht rentabel.
Fur erfahrene PHP Entwickler ist das Zend Framework die beste Wahl fur ein Pro-
jekt. Die Hauptarbeit liegt in der Umsetzung mit PHP und weniger mit der Konfigu-
ration oder Adaption eines Frameworks.
Alle drei Frameworks setzen auf aktuelle Konzepte von modernen PHP Software
Frameworks, erfullen so auch die Anforderung an Aktualitat.
Mit Veroffentlichung des ersten Buches, einer Einfuhrung in das Yii Framework mit
Titel “Agile Web Application Development with Yii1.1 and PHP5” ist ein guter Schritt
getan, neue Entwickler fur Yii zu begeistern, sodass auch eine Weiterentwicklung vor-
angetrieben wird.
Mit Dezember 2010 wird die Veroffentlichung von symfony 2.0 erwartet. Eine verbes-
serte Performance sowie Anpassungen in der Struktur sind geplant. Mit der aktuellen
28
umfangreichen Verbreitung von symfony ist eine schnell Weiterentwicklung vorgege-
ben.
Das Zend Framework mit der Firma Zend Technologies Ltd. als Hauptentwickler von
PHP liefert dadurch wohl auch einen uberlegenen Vorteil gegenuber anderer Frame-
works. Die Weiterentwicklung scheint vorerst mit der Entwicklung von PHP garantiert.
Ausserdem sind neue Konzepte der Skriptsprache PHP schnell innerhalb des Frame-
work zu finden.
Ob als Einstiegshilfe fur unerfahrene Entwickler und einfachen Webseiten, oder
Grundstruktur komplexer Webanwendungen von langjahrigen PHP Entwicklerteams,
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 außere Spalte die prozentuale Gewichtung der
Projekteigenschaften ausgefullt wird. Die Summe der Gewichtungen ergibt 100%. Ei-
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 moglichst niedriger Wert entspricht einer gunstigen Verwendung des
Framework.
Yii symfony Zend Relevanz in %
Erfahrung des Entwicklerteam 2 2 1
Schneller Einstieg 1 2 3
Umfangreiches Projekt 3 2 1
Kleines Projekt 1 3 3
Einmalige Entwicklung 1 2 3
Fortwahrende Entwicklung 3 2 1
Schnelle Ergebnisse, Prototyping 1 2 3
Genaue Layoutvorgaben 2 1 1
Verwendung von Bibliotheken 2 1 1
Anforderung Performance 1 2 2
Anforderung Sicherheit 2 1 1
Anforderung Stabilitat 1 1 2
Große Datenstrukturen 3 2 1
Komplexe Datenstrukturen 2 1 2
Summe 100%
30
Abbildungsverzeichnis
1 MVC Modell, Quelle: [ZP10] . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Entity-Relation Modell, Quelle: [QZ10] . . . . . . . . . . . . . . . . . . 10
Literatur
[CHLJ09] Wei Cui, Lin Huang, LiJing Liang, and Li Jing. The research of php deve-
lopment 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] Xue Qiang and Xiang Wei Zhuo. The definitive guide to yii 1.1. 2010.
[Sch07] Kurt Schneider. Abenteuer Softwarequalitat. 2007.
[WiE10] ez publish. 2010. http://de.wikipedia.org/wiki/EZ_Publish#eZ_
Components (25.07.2010).
[WiP10] Php. 2010. http://de.wikipedia.org/wiki/PHP (24.11.2010).
[ZEN10] 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