You are on page 1of 37

Bakkalaureatsarbeit

Evaluierung von PHP Frameworks

Christoph Lipautz

————————————–

Technische Universität Graz

Graz University of Technology


Eidesstattliche Erklärung

Ich erkläre an Eides statt, dass ich die vorliegende Arbeit selbstständig verfasst, andere
als die angegebenen Quellen/Hilfsmittel nicht benutzt und die den benutzten Quellen
wörtlich 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 für


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.
Abhängig von der Spezifikation eines Projektes soll ein geeignetes PHP
Framework gefunden werden. Diese Arbeit gibt eine Übersicht moderner
Frameworks, aktueller Konzepte und einigen Vorzüge in deren Verwendung.
Im Detail werden drei PHP Frameworks betrachtet, eine Gegenüberstellung
durchgeführt 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 Einführung 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 Übersicht 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 Einführung
1.1 Ausgangssituation
Das World Wide Web beschränkt sich nicht nur auf die Darstellung einfacher stati-
scher Seiten die untereinander verlinkt sind, sondern dient auch als Oberfläche für
verteilte Programme, den Webanwendungen. Durch die steigende Komplexität dieser
Anwendungen definiert sich die Notwendigkeit von performanter, stabiler und flexibler
Software. Die Entwicklung immer leistungsfähigerer Hardware, nach dem Gesetz von
Moore, ermöglicht schnellere Server sowie Internetverbindungen. Dies führte wiederum
zur Möglichkeit, anspruchsvolle Applikationen innerhalb des Web zu betreiben. Was
früher in einfachen, verteilten, meist voneinander unabhängigen Skripten ausgeführt
wurde, wird heute in großen Softwaresystemen verarbeitet. Die Verwendung solcher
Softwaresysteme ermöglicht die Darstellung von dynamischen Inhalten. Es entstehen
durchaus große Datensammlungen, die in geeigneter Form verarbeitet und abgebildet
werden müssen. Vermehrt gewinnt die Interaktion des Benutzers mit diesen Anwendun-
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
Server- und Client-seitiger Abarbeitung. In einer Server-seitigen Anwendung erfolgt die
Ausführung vollständig 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 ausgeführt wird.
Sie wächst stetig in ihrem Funktionsumfang und bietet neue Konzepte. Durch die
fortlaufende Weiterentwicklung hat sich PHP etabliert und sich gegenüber anderen
Skriptsprachen wie zum Beispiel Perl durchgesetzt. Durch abgegrenzte Möglichkei-
ten des World Wide Web, bzw. des HTTP-Protokolls, gibt es Einschränkungen von
Lösungswegen von Problemen. Dies führt wiederum dazu, dass eine konkrete Lösung
häufig in vielen Variationen, mit leichten Unterschieden vorliegt. Es ist naheliegend,
eine allgemein ausreichende und passende Lösung zu verwenden, gegebenenfalls zu ad-
aptieren und das sprichwörtliche Rad nicht neu zu erfinden. “Wiederverwendbarkeit ist
ein alter Traum der Softwaretechnik. Wo sie funktioniert, schafft sie bessere Qualität
in kürzerer Zeit.” [Sch07]

1
1.2 Die Skriptsprache PHP
Die im Jahre 1995 ins Leben gerufene, frei zugängliche Skriptsprache PHP, ist aktuell
mit Version 5.3 verfügbar. Ursprünglich 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
zugängliche Skriptsprache handelt, zu ersetzen[WiP10]. Die Softwareentwickler Andi
Gutman und Zeev Suraski entwickelten mit dieser Basis die Version PHP3, welche
erstmals eine stärkere Verbreitung erfuhr. Aus diesem Fortschritt heraus gründeten
Gutman und Suraski die Firma Zend Technologies Ltd., die bis heute führend hinter
der Entwicklung von PHP steht. Der Name leitet sich aus den beiden Gründervorna-
men Zeev und And i ab. Mit PHP Version 4 wurde die Skriptsprache Perl endgültig
in der Verbreitung im Bereich der Programmierung von dynamischen Webseiten über-
holt. Hierzu führte vor allem der schnellerer Einstieg in die Programmierung mit PHP
gegenüber Perl. Mit Sommer 2004 wurde, mit verbesserter Unterstützung von objek-
torientierten Konzepten, die Version 5 veröffentlicht. Da die verschiedenen Versionen
von PHP große Unterschiede aufweisen, ist es üblich, die zugehörige Hauptversions-
nummer der Bezeichnung PHP anzuhängen. 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 nachlässige Verwendung von Typen eine potentielle
Fehlerquelle sein. Beispielhaft wird dies in Listing 1 dargestellt.
1 <?php var dump (
2 0 == n u l l , // b o o l ( t r u e )
3 ’ 0 ’ == 0 , // b o o l ( t r u e )
4 ’ 0 ’ == n u l l // b o o l ( f a l s e )
5 );
Listing 1: schwache Typisierung in PHP

1.3 Entwicklungsumgebung
Eine typische Umgebung für 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 ausführbar sind, wur-

2
de in dieser Arbeit explizit die bereits angesprochene Konstellation von Linux, Apache
und MySQL berücksichtigt. Die Irrelevanz welches dieser Programme verwendet wird,
zeigt sich darin, dass die Framworks keine Abhängigkeiten hierzu vorweisen. Im Weite-
ren fällt die Entscheidung zu dieser Zusammenstellung, da sie wie auch PHP und alle
betrachteten Frameworks aus quelloffener Software besteht. Unterschiede für den Ent-
wickler sind ebenfalls nicht gegeben, da PHP keine vom Betriebssystem oder Webserver
abhängigen 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 Vorzüge von PHP Frameworks
aufzuzeigen und einen Überblick über aktuell relevante PHP Frameworks zu schaffen.
Zu jedem der gewählten Frameworks ist eine Kurzbeschreibung der Besonderheiten
verfasst, wobei drei ausgewählte 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
gewählten Frameworks darzustellen, findet sich am Ende dieser Arbeit eine Entschei-
dungshilfe in Form einer Entscheidungsmatrix. Mit dem Gedanken für jede Aufgabe
das richtige Werkzeug zu finden, kann mit einer Projektspezifikation ein Framework
gewählt 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 ökonomisches Arbeiten ermöglicht wird.
Neben einer Software Bibliothek, welche eine konkrete Funktion verfolgt, gibt es Soft-
ware Frameworks, die eher allgemeine Funktionalität abdecken. “Das Framework als
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 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 unterstützt 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 Änderungen selbstständig
ohne weitere Einschulung durchführen. Von der Erfahrung langjähriger PHP Entwick-
ler können unerfahrene Programmierer profitieren. Sie arbeiten in einer strukturierten
Umgebung, lernen aus Beispielen und müssen nicht erst selbst eine Basis für Projekte
schaffen. Um wiederkehrende Aufgabenstellungen mit vorgefertigten Lösungen zu ver-
wenden, folgt ein Framework dem Prinzip der Erweiterbarkeit. Die Realisierung erfolgt
über Erweiterungen als Module, Extensions oder Plugins. Im Wesentlichen verfolgen
diese dasselbe Ziel, indem sie eine Funktionalität implementieren, die ein konkretes
Problem verarbeitet. Erweiterungen werden meist nicht von den Frameworkentwick-
lern selbst entwickelt, sondern von einem mit der Funktionalität 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 erhöhten Anfor-
derungen gerecht werden. Ein PHP Framework sollte nachfolgende Kriterien erfüllen.

• Qualität, Stabilität und Sicherheit - Da die zu entwickelnde Software auf einem


Framework beruht, sind Qualität, Sicherheit und Stabilität drei der wichtigsten
Kriterien. Ein umfangreiches und möglichst vollständiges Testframework soll-
te dem Kern des PHP Framework selbst angefügt sein, um Entwicklungsfehler
möglichst früh und möglichst schnell bestimmen zu können. Sicherheitslücken
in der Kernsoftware bedeuten ein hohes Risiko. Erfahrene Internetuser können
das Framework vieler Webseiten durch ihre wesentlichen Merkmale bestimmen.

4
Wenn bereits Sicherheitslücken der Öffentlichkeit bekannt sind, besteht die Ge-
fahr, dass einer dieser kundigen Besucher diese Lücke missbraucht. Durch eine
große Anzahl von Benutzern und einer weitläufigen Verbreitung werden Fehler im
Kernsystem eher gefunden, somit trägt auch dies maßgeblich zur Verbesserung
eines Frameworks bei. Natürlich soll auch die am Framework entwickelte Soft-
ware geprüft werden, sofern die geeigneten Tools hierfür zur Verfügung 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
durchführbar. Neben der Optimierung des Kernquellcodes sind Caching Mecha-
nismen unabdingbar. Diese sind eine günstige Alternative zum Hardwareupgrade
des verwendeten Webservers um eine Leistungssteigerung durchzuführen. 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 für PHP selbst, die automatisiert auf PHP angewendet
werden können. Unter die bekanntesten zählen 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]

• Aktualität/Weiterentwicklung - Die Webentwicklung erweist sich als sehr schnell-


lebig. Für Frameworkentwickler ist es notwendig, für neue Möglichkeiten 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 erwähnt wurde, sind erst mit PHP5 wichtige
Konzepte der objektorientierten Programmierung in die Sprache aufgenommen
worden. In einigen PHP Frameworks wird eine Abwärtskompatibilität zu PHP4
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
auf PHP5 verzichtet wird. Implizit sind dadurch natürlich keine der Vorzüge von
PHP5, innerhalb des Quellcode des Framework, enthalten. Darüber hinaus kann
man eine völlige Überarbeitung oder sogar eine Einstellung der Weiterentwick-
lung erwarten.

5
• Funktionsumfang - Angebotene Funktionalität ist nur sinnvoll, solange diese all-
gemeine Aufgaben erfüllt und keine Spezialfälle abdeckt. Die Abgrenzung und
bedachte Auswahl stellt einen erhöhten Stellenwert dar, da mehr Quellcode auch
zugleich Performance- und Qualitätsverlust mit sich bringt. Anders betrachtet,
ist es natürlich nicht sinnvoll, jede Aufgabe in Erweiterungen anzubieten. Kern-
funktionalität ist klar erkennbar, sobald viele Erweiterungen häufige Abhängig-
keiten dazu entwickeln.

• Erweiterung - Entsteht ein Stück Code, welches man gut in weiteren Projekten
wiederverwenden kann, so ist es notwendig, dies vom restlichen Code zu lösen.
Hierfür 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
Funktionalität. Die Erweiterungen stellen eine Möglichkeit dar, unabhängig von
der Kernsoftware neue Lösungen für 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]

• Unabhängigkeit/Flexibilität - Über 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 Einführung von PDO, den PHP Data Objects, ist es wesentlich einfacher
geworden, die häufigsten 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 können. 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 möglich sein, sich leicht eine Übersicht schaffen zu

6
können. Nur so kann man vorweg schon entscheiden, ob denn auch die richtige
Wahl getroffen wurde. Hierbei helfen oft verwendete Kurzanleitungen für kleine
Webprojekte wie die Erstellung einer einfachen Blog Anwendung. Ist der erste
Schritt einmal gewagt, liegt ein hoher Stellenwert auf Umfang und Vollständig-
keit der Dokumentation. Ähnlich einer FAQ Liste werden oft Sammlungen von
Tutorial oder How-To, für 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 durchführen. Diese
strikte Trennung gibt einerseits einen variablen, doch andererseits auch sehr vorge-
gebenen Aufbau einer Applikation vor. Intuitiv fällt 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 wählen ist und weist diesem die Anfrage zu. Jeder
Controller verfügt über eine Reihe von Actions, eine die der Anfrage entsprechenden,
wird gewählt und ausgeführt. In diesem Bereich erzeugt der Controller bei Bedarf eine
Verbindung zum Model, speichert oder fragt Daten ab. Der Controller wählt abhängig
vom Verlauf seiner Abarbeitung einen View, übergibt diesem etwaige Daten und führt
diesen aus.

2.2 CRUD
Es gibt vier Aktionen, die in Bezug auf ein Model ausgeführt werden können: das Model
zu erstellen, Informationen zu lesen, das Model zu verändern und es zu löschen. Man
spricht von einem CRUD Modell. CRUD steht für 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 enthält die vier Methoden des CRUD Modell.
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
von Delete ist nicht zwingend ein eigener View nötig. Meist wird hier innerhalb des
Controller eine Weiterleitung zu einer anderen Action - wie einer Listenansicht des

8
Abbildung 1: MVC Modell

Model - gewählt.

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, können auf folgende Arten
eingeschränkt werden[QZ10]:

• 1..n oder One-to-Many Beziehung, bezeichnet die Relation zwischen zwei Tabel-
len. Beispielsweise sind einem Benutzer viele Einträge 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 höchstens einen zugehörigen 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 gehört und eine Kategorie jeweils wieder viele Einträge haben
kann, dann wird eine Many-to-Many Beziehung benötigt. Dies kann man als
eine Verbindung von One-to-Many Beziehungen der beiden Tabellen über eine
Zwischentabelle sehen. Eine Kategorie hat somit viele Einträge, 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 über 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
der Laufzeit bestimmt werden. Somit ist es möglich, die Datenbank abzuändern, ohne
entsprechende Anpassungen im Quellcode vornehmen zu müssen. Der Performance
Verlust ist gering, nur beim ersten Zugriff auf das Model werden die Tabellen bzw.

10
Modelinformationen ausgelesen. Dies bedeutet eine zusätzliche Datenbankabfrage pro
Model.

2.4 RAD
RAD steht für Rapid Application Development und bezeichnet ein von Prototypen ge-
triebenes Entwicklungsmodell in der Softwareentwicklung. Durch Code Generierungen
sowie dem CRUD Modell wird dies begünstigt. Über das Model wird bei der Generie-
rung ein vollständiger und ausführbar CRUD Pfad erstellt. Die entsprechenden Con-
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
mit jeweiligen Prototypen üblich. So wird eine Applikation so lange entwickelt, bis
diese vom Kunden als abgenommen gilt.

11
3 Übersicht von bekannten PHP Frameworks
Als Grundlage für eine objektive Zusammenstellung wird nach den in Kapitel 1.6
genannten Kriterien eine Recherche durchgeführt. Nachdem ein wesentlicher Faktor
eine große Verbreitung bzw. breite Community darstellt, können alle Frameworks,
die nicht mit einfachen Suchanfragen mit diversen Internet-Suchmaschinen gefunden
wurden, vorweg ausgeschlossen werden. Nachfolgend wird keine vollständige Liste al-
ler verfügbaren PHP Frameworks aufgezeigt, jedoch liefert diese einen ausreichenden
Überblick über 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 Lösungen für 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 Lösung angeboten. Hierbei muss
der Entwickler für jedes Model die Konfiguration einer INI-Datei vornehmen und des-
sen Datenstruktur dort abbilden. Über diese Konfiguration abstrahiert das Framework
Zugriffe auf Daten. Quellcodes für 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 übertragen.
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 über eine Konfigurationsdatei welche ein Datenbank
Schema abbildet und die Attributtypen über den Attributnamen errät. 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 hält. Zum Beispiel
könnte man auf die Zuordnung eines Model zur passenden Datenbanktabelle verzich-
ten, indem Tabellen- und Klassenname des Model die Konvention erfüllen. 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 für 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 ältere Hostings verwendet werden können. Der geringe
Umfang spiegelt sich auch im Angebot der Funktionalität wieder. Für unerfahrene
Entwickler liefert diese Framework eine Möglichkeit zum einfachen Einstieg in die
Entwicklung von Webanwendungen, ohne aus einer Vielzahl von objektorientierten
Konzepten auswählen zu müssen. Die offizielle Dokumentation ist, zum Nachteil des
Framework, schlecht strukturiert und dürftig.
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 unabhängig voneinander und in Kombination mit den Bibliotheken ande-
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,

13
dass Komponenten, also gebündelte Funktionspakete auch vollständig getrennt vonein-
ander verwendet werden können. Die Dokumentation bietet einen schnellen Einsteig,
ist vollständig und sehr detailiert. eZ Components benötigt mindestens PHP in Versi-
on 5.2.1, eine durchaus akzeptable Aktualität 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 unterstützen. 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 können. Ein bereits vorgegebener Administrationsbereich bietet
oft gebrauchte Features wie Benutzer-, Navigations- oder Templateverwaltung. Durch
diese Vorgaben eignet sich das Framework auch nur für Administrator basierte Appli-
kationen. Die Dokumentation ist in einem Wiki gehalten, wenig umfangreich und wird
hauptsächlich durch Beispiele erklärt.
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 über 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
Systeme verwendet werden. Eine Dokumentation fehlt der Software, sodass ein Einstieg
über 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
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 entwor-
fen, um eine Basis für eigene Entwicklungen zu schaffen. Später wurde die Entscheidung
gefällt, das Framework der Öffentlichkeit zugänglich zu machen. Dieser Schritt hatte ei-
ne äußerst schnelle Verbreitung und ebenso zügige Weiterentwicklung zur Folge. Beson-
dere Bedeutung legt symfony auf eine Unabhängigkeit der verwendeten Komponenten.
Sogar die Datenbankabstraktion ist lose an das Framework gekoppelt. Außerdem sind
Teile des Frameworks auch als eigenständige Komponenten verfügbar. Mit Dezember
2010 soll Version 2 veröffentlicht werden. Hierbei soll eine vollständige Überarbeitung
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 übertragen. Die
sehr geringe Dokumentation erschwert einen Einstieg und ist daher für Einsteiger nicht
empfehlenswert. Die Verwendung empfiehlt sich für Softwareentwickler, welche zuvor
bereits Webanwendungen in Ruby on Rails verfasst haben und noch keine Erfahrung
mit PHP vorweisen können.

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,
einem ehemaligen Entwickler von Prado, siehe Kapitel 3.7, für das noch recht junge
PHP Framework gelegt. Vorgegeben wird in Yii, jQuery als Javascript Framework so-
wie ein standardmäßiges Seitenlayout. Beides findet sich auch in diversen funktionalen
Komponenten, in Yii Widgets genannt, wieder. Einen schnellen Einstieg verspricht die
übersichtliche 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 Tech-
nologies Ltd entwickelt. Die Software kann als eine ungebundene Ansammlung an
Komponenten gesehen werden, was die Flexibilität bedeutend erhöht. Darüber hinaus
stellt es im Gesamten ein vollwertiges Framework mit MVC Architektur dar. Eine
markante Auffälligkeit 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] Für erste Schritte erhält man auf der
offiziellen Webseite einen Quickstart Guide. Weiterführend 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 könnte von dem, bereits in PHP Version 5.3 enthaltenen,
neuen Konzept der Namespace abgelöst 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. Für Dezember 2010 ist
die Veröffentlichung einer überarbeiteten Version 2 geplant, wobei diese die bisherige
Verwendung von PHP4 lösen 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 für eine genauere Betrachtung ausgewählt. Die Frameworks weisen deutliche
Unterschiede auf, sind in ihrem Aufbau ähnlich 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 mögliche 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 Funktionalität 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 Möglich-
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 Er-
zeugung von Datenbanken aufweisen können. Dem Entwickler wird nach erfolgreicher
Ausführung des Prozesses zur Erzeugung der Datenbank eine Umgebung generiert,
die bereits funktionstüchtige Models zu den Datenbanktabellen enthält. Der Aufbau
erfolgt in höchster Ebene über zwei Klassen. Eine Klasse dient zur direkten Repräsen-
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.

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
zur Datenverwaltung im CRUD Modell zur Verfügung, allerdings halten sich diese
sehr beschränkt in ihrer Funktion. Jegliche Erweiterung obliegt dem Entwickler, dies
birgt einerseits mehr Zeitaufwand, verringert jedoch Funktionalität des Model auf die
tatsächlich benötigte.

4.1.1 Beispielcode

Listing 2 zeigt einen praktischen Vergleich der Ausführung eines Datenerhalt über ein
Model.
1 <?php
2 // 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 )
3 $ u s e r=U s e r : : model ( )
4 −>f i n d ( ’LOWER( name)=? ’ ,
5 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 ’ ) )
6 );
7

8 // symfony Model U s e r ( u s i n g component D o c t r i n e )


9 $ 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 (
10 $ 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 ’ )
11 );
12

13 // Zend Model U s e r
14 $ 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 ( ) ;
15 $ 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 ( ) ;
16 $ u s e r m a p p e r −>f i n d O n e B y L a b e l (
17 $ t h i s −>g e t R e q u e s t ()−>getParam ( ’ name ’ , ’ g u e s t ’ ) ,
18 $user
19 );
Listing 2: Model im Vergleich

19
4.1.2 Zusammenfassung

Übersichtlich betrachtet, bekommt man mit Yii eine schnelle und einfache Möglichkeit
Daten zu verwalten, bei der eine Konfiguration kaum notwendig ist. Die Tabellenat-
tribute werden während der Laufzeit im Model vermerkt. Völlig gegensätzlich passiert
die Erzeugung von Models in symfony über die Beschreibung der Datenstruktur in
einer Datei im Format XML, oder dessen gleichwertigen Kurzform YAML. Ein Vorteil
hierbei ist die Übersichtlichkeit der Models und Relationen sowie die Möglichkeit, die
Datenbank selbst direkt über das angelegte Schema zu erzeugen. Spezialfälle können
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
erfolgen vom Entwickler ohne weitere Hilfe des Framework. Dies benötigt einiges an
Mehraufwand, verspricht jedoch eine Aufgaben orientierte Lösung.

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
einzubinden, kann auf sogenannte Partials zurückgegriffen 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 zugehörige Funktionalität ausgeführt werden
muss. Zu diesem Zweck sind in Yii sogenannte Widgets eingeführt. 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 Funktionalität
erweitertes Partial bezeichnet ein Component. Diese werden zwar ähnlich wie Actions
definiert, jedoch werden sie indirekt über die Integration in einem View ausgeführt.
Slots sind ein weiteres Konzept innerhalb der Präsentationslogik 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 befüllt 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 Einführungen.

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. überschrieben 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
zusätzliche Konfiguration verspricht einfache und schnelle Anpassungen. Dem Zend
Framework steht abermals mehr Flexibilität, jedoch auch ein erhöhter Entwicklungs-
aufwand gegenüber.

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 abgeändert werden. So ist es einfach, eine Standard Action
festzulegen. Ein typisches Beispiel sei folgendes. Ein Controller ermöglicht den Infor-
mationszugriff auf Filme, die entsprechende Liste oder Übersichtseite, entspricht der
Route http://www.example.com/index.php/movie/index. Einfache Konfigurationen,
mit Unterstützung der URL-Rewrite Technik des Webservers, erlauben eine Anpas-
sung der dargestellten Route. Im genannten Beispiel könnte dies zu einer gewünschten

21
Route wie http://www.example.com/movies.html führen. Diese ist sowohl für den Be-
sucher als auch für Suchmaschinen aussagekräftig und lesbar.

4.3.1 Zusammenfassung

In allen drei Frameworks erfolgt die Ausführung der Kontrolllogik in sehr ähnlicher
Weise. Der HTTP Request wird mit speziellen Parametern festgelegt, welche die aus-
zuführenden Controller und Action eindeutig wiedergeben. Innerhalb der Action wird
sämtliche Prozesslogik ausgeführt, bei Bedarf Daten via Models eingeholt und diese
an den View übergeben.

4.4 Komponenten eines Framework


4.4.1 Formular und Formularvalidierung

Die Argumenten Übergabe einer HTTP Anfrage erfolgt in PHP meist über die HTTP-
Request Methoden POST oder GET. Die GET Parameter sind für 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 unterstützt diese Vorgehensweise mit den notwendigen darstellbaren Ele-
menten.
Yii liefert mit der Klasse CHtml ein Sammlung von häufigen HTML Elementen,
darunter auch Formelemente. Diese lassen sich bequem über 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.
Innerhalb von symfony gibt es ein ähnliches Konstrukt mit Namen sfForm. Hierbei
werden neben Models auch Formklassen generiert. Über 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 Überprüfung 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 für den Besucher in verschiedenen Sprachen aufbereitet
werden kann, ohne Änderungen an der Umsetzung vornehmen zu müssen. Lokalisie-
rung entspricht demselben Prinzip, jedoch zielt dies auf die Formatierung von Dar-
stellungen wie eines Datum oder einer Nummer vor. Die gebräuchliche Kurzform für
Internationalisierung ist i18n, für Lokalisierung i10n. Das MVC Modell liefert einen
besonderen Vorteil. Nach Konvention sind alle anzuzeigende Texte innerhalb der Dar-
stellungslogik, dem View enthalten. Natürlich können auch gespeicherte Daten in ver-
schiedene Sprachen vorliegen. Die Verarbeitung erfolgt in diesem Fall über das Model.
Das Yii Framework bietet für die Übersetzung innerhalb des View eine allgemein
zugängliche Methode. Die Übersetzungen selbst werden in einfachen Textdateien hin-
terlegt. Für die Lokalisierung stehen einige Helfer-Klassen zur Verfügung, die bei Be-
darf geladen werden können.
Innerhalb von symfony sowie im Zend Framework ist ein sehr ähnlicher Aufbau zu
verzeichnen. Über Helfer-Methoden werden Texte und Formatierungen umgewandelt,
die Übersetzungen sind in Text-Dateien gespeichert. Zusätzlich wird in symfony die
Mehrsprachigkeit von Datenhaltung in der Datenbank berücksichtigt.

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
der bereits zuvor generierten Darstellung. Wird ein entsprechender HTML Code ge-
funden, so ersetzt dieser die Ausführung 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 Stücke, 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
können Informationen an eine Cache Komponente übergeben und über eine eindeu-
tig vergebene Identifikation auch wieder abgeholt werden. Innerhalb des View können
über 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
selbst durch. Die Zwischenspeicherung einer gesamten Webseite erfolgt über 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 Gültigkeit festlegen.
Das symfony Framework bietet zu den Komponenten des View Modell einen Ca-
ching Mechanismus. Eine Action, ein Partial, ein Component oder ein Slot können zur
Zwischenspeicherung zugewiesen werden. Dies erfolgt in einer exklusiv dafür 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, über eine Identifikation mit zusätzlich definierter Le-
bensdauer. In der offiziellen Dokumentation findet sich ein ausreichende Einführung
zur Erstellung einer Caching Umgebung, eine vorgefertigte Lösung gibt es von Seiten
Zend jedoch nicht.

4.4.4 Testen

Für eine komplexe Anwendungen, oder Applikationen denen eine hohe Stabilität oder
Sicherheit abverlangt wird sind automatisierte Tests notwendig. “Automatisierter Test
bedeutet, dass die Testfälle mit Hilfe eines Werkzeugs und ohne weiteres Zutun eines
menschlichen Testers aufgerufen, durchgeführt und mit den Sollergebnissen verglichen
werden. Die hohe Forderung, alle unit tests ständig durchzuführen, ist ohne Automa-
tisierung nicht zu erfüllen.” [Sch07] Man unterscheidet zwischen Modul und System
Test. Bei einem Modultest wird eine separiert ausführbare Funktionalität, wie bei-
spielsweise eine Methode, auf ein korrektes Ergebnis geprüft. Die Vorgehensweise ist
so, dass möglichste viele und unterschiedliche Eingaben mit den korrespondierend rich-
tigen Ausgaben verglichen werden. Häufig wird für Modultest auch die englische Be-
zeichnung Unit-Test verwendet. Die zweite, geläufige 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 Ausführung eines Test
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
Fall nicht das Ziel, meist auch gar nicht durchführbar. Wichtig ist jedoch das Testen der
Hauptfunktionalität 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 Ausführung dieser erfolgen. Auf diesem Weg
sind Fehler in komplexen Abhängigkeiten leichter zu aufzufinden. Neben der Möglich-
keit, mit Hilfe von Tests die Sicherheit und Stabilität eines Webprojekt zu erhöhen, ist
es auch eine gute Lösung, als Vorgehensmodell eine Test-getriebene Entwicklung zu
wählen. Eine Teilspezifikation wird gewählt, die entsprechenden Tests eingepflegt. Bei
der Ausführung der automatisierten Überprüfung 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 Rohgerüst von Klassen
für Modul- wie auch Funktionstests. Diese sind dem Model entsprechend aufgebaut und
können als Vorlage direkt verwendet werden. Modultests werden über PHPUnit, ein
in der Programmbibliothek PEAR frei verfügbaren Testframework, durchgeführt, für
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.
Beabsichtigt wurde eine verbesserte Lesbarkeit sowie eine unabhängige Testumgebung.
Die Verwendung und Ausführung passiert analog zu dem in Yii verwendeten PHPU-
nit Framework. Auch für die simulierte Ausführung in einem Webbrowser wurde eine
eigene Applikation erzeugt. Über die sfBrowser PHP Klasse kann ein Umgebung er-
zeugt und mit dessen Methoden eine Ausführung nachgespielt werden. Der Nachteil
an der Ausführung in dieser Variante ist, dass kein Client-Seitiger Code wie Javascript
ausgeführt 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 beschränkt sich auf Modultest und leitet diese von PHPUnit
ab. Erweitert wird dies noch mit einer vereinfachten Möglichkeit zur Benutzung von

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
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
automatisierten Generierung der Models auch die zugehörigen Rohgerüste zum Tes-
ten erzeugt werden. Neben den Testen gibt es eine Reihe von Techniken, um Sicher-
heitslücken 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 Sicherheitslücke bei der Ausgabe bzw. auch Ausführung 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 gehören 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 sämtliche an den
View gelieferten Daten bereits von potentiellem Schadcode entfernt wurden.
Eine ähnliche Vorgehensweise erzeugen SQL Injections. Parameter eines HTTP-
Request, welche bei der Erzeugung von dynamischen Webseiten notwendig sind, wer-
den vom Angreifer so abgeändert, 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 über die verfügbaren Lernmethoden. Auf
der Website von Yii werden lediglich zwei Tutorials, eine allgemeine Einführung, eine
Cookbook Sammlung, zwei Screencasts sowie Cheatsheets angeboten. Der Umfang

26
dieser Dokumentation ist auf den ersten Blick sehr spärlich, liefert jedoch einen guten
und strukturierten Einblick in das Framework und in vielen Bereichen auch darüber
hinaus. Das erste Buch zu Yii wurde während bzw. kurz vor Abschluss dieser Arbeit
veröffentlicht.
Die französische Firma Sensio Labs, Hauptentwickler von symfony, liefert eine Reihe
von Büchern, die auf symfony abgestimmt sind. Diese sind auf der offiziellen Websei-
te auch als kostenlose Druckversion verfügbar. Neben diesen gibt es, durch die sehr
große Community, eine Vielzahl an How-Tos und Tutorials. Als zusätzlichen Bonus
veröffentlicht symfony jedes Jahr zur Weihnachtszeit eine 24 Stunden Dokumentation,
aufgeteilt auf eine Stunde pro Tag, zur Umsetzung einer praktischen Webseite.
Mit über 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
Übersetzung liegt in Deutsch, Französisch, Japanisch, Russisch und Chinesisch vor.
Multimedial werden Podcasts, abonnierbare Mediendaten und Webinars, sowie Semi-
nare über das World Wide Web angeboten. Darüber hinaus gibt es von der Entwick-
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
den Kriterien in Kapitel 1.6 ergibt sich eine zufriedenstellendes Ergebnis. Qualität, und
Stabilität bieten die Frameworks über 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, überzeugt 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
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.
Dies liefert den Frameworks eine bedeutende Unabhängigkeit sowie auch Flexibilität.
Yii hat vordefinierte Abhängigkeiten, die erst durch entsprechende Konfigurationen
ausgeblendet werden. Äuß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 Abhängigkeiten innerhalb der Soft-
ware, eignet sich das Framework nicht für große Webapplikationen. In der Umsetzung
von kleinen Projekten wiederum bietet Yii einige Vorteile - wie ein vorgefertigtes Lay-
out und funktionsbereiten Teilstücken.
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
Aufwand bis zur Basis einer Applikation wohl nicht rentabel.
Für erfahrene PHP Entwickler ist das Zend Framework die beste Wahl für 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, erfüllen so auch die Anforderung an Aktualität.
Mit Veröffentlichung des ersten Buches, einer Einführung in das Yii Framework mit
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 vor-
angetrieben wird.
Mit Dezember 2010 wird die Veröffentlichung 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 überlegenen Vorteil gegenüber 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 für unerfahrene Entwickler und einfachen Webseiten, oder
Grundstruktur komplexer Webanwendungen von langjährigen 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 äußere Spalte die prozentuale Gewichtung der
Projekteigenschaften ausgefüllt 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 möglichst niedriger Wert entspricht einer günstigen 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
Fortwährende 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 Stabilität 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 Softwarequalität. 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

You might also like