- Cakephp
-
CakePHP Entwickler: Cake Software Foundation Aktuelle Version: 1.2.2.8120
(19. März 2009)Betriebssystem: plattformunabhängig Programmiersprache: PHP Kategorie: Framework Lizenz: MIT-Lizenz Deutschsprachig: Nein cakephp.org CakePHP, kurz Cake, ist ein in PHP geschriebenes quelloffenes Web-Framework für PHP 4 und 5. CakePHP ist angelehnt an Ruby on Rails und folgt ebenfalls dem Schema des Model View Controller (MVC). Weitere Gemeinsamkeiten mit Ruby on Rails sind die zugrunde liegenden Prinzipien Don’t repeat yourself (DRY) und Convention over Configuration (CoC).
Inhaltsverzeichnis
Geschichte
CakePHP wird seit 2005 entwickelt. Es entstand parallel zur steigenden Popularität von Ruby on Rails und dem Wunsch nach einem ähnlichen MVC-Framework auf PHP-Basis.
Philosophie
Analog zu Ruby on Rails wird auch bei CakePHP versucht, die Konfiguration auf ein Minimum zu beschränken. Das heißt, dass der einzige Konfigurationsschritt die Festlegung der Verbindungsparameter zum Datenbankserver ist. Die Zuordnung von z. B. Models zu Datenbanktabellen geschieht über die Namensgleichheit in Singular und Plural, nicht über Konfigurationsdateien. Dieses Prinzip ist als Convention over Configuration (CoC) bekannt. Beispiel:
- Model: User, Group (Singular)
- Controller: UsersController, GroupsController (Plural)
- Datenbanktabelle: users, groups, groups_users' (Plural, letztes Beispiel zeigt den Namen für eine Relationstabelle für hasAndBelongsToMany. In diesem Fall werden die zu verknüpfenden Tabellen in alphabetischer Reihenfolge angegeben)
- Fremdschlüssel in Datenbanktabellen: user_id, group_id (Singular plus _id)
CakePHP erkennt z. B. Fremdschlüssel in Datenbanktabellen automatisch und erzeugt dementsprechend die korrekten SQL-Abfragen.
Besonderheiten
Im Vergleich zu anderen Web-Frameworks stellt CakePHP nur geringe Anforderungen an den Webserver. Es unterstützt PHP 4 und 5 und benötigt keine eigene Datenbank für die Anwendung, sondern erlaubt es, Datenbanktabellen mit Präfixen zu verwenden. Einzig für die Verwendung von sogenannten Console Applications ist ein Zugriff per Kommandozeile notwendig.
Schichten
Model
Als Backend einer CakePHP-Applikation kommt eine Datenbank zum Einsatz. Es werden folgenden Datenbankmanagementsysteme unterstützt:
Das sogenannte Model stellt die vorhandenen Daten dar. In einer Benutzerverwaltung, welche mit Benutzer und Benutzergruppen arbeitet, sind die Benutzer (user) und Benutzergruppen (usergroup) die Models.
Jedes Model bringt eine Anzahl an Methoden mit, welche zur Verwaltung der Daten genutzt werden. Zum Beispiel gibt es Methoden zum Lesen aus der Datenbank (Model::read() oder Model::findAllById()), zum Speichern der Daten in die Datenbank (Model::save() oder Model::saveField()) oder zum Erstellen eines neuen Datensatzes (Model::create()). Somit ist die CRUD-Funktionalität in den Models schon integriert.
Die Beziehungen zwischen verschiedenen Models werden über sogenannte Associations (Beziehungen) festgelegt. Dabei existieren folgende Möglichkeiten: hasOne, belongsTo, hasMany und hasAndBelongsToMany. CakePHP kann damit automatisch die benötigten Datenbankabfragen (inklusive eventuell benötigter Join-Befehle in SQL) generieren. Die Konfiguration geschieht durch die Einhaltung bestimmter Konventionen bei der Vergabe der Namen von Datenbanktabellen, Modellen und Controllern (siehe Abschnitt Philosophie). Es werden keinerlei Konfigurationsdateien benötigt.
Models können um Behaviours erweitert werden. Es handelt sich dabei um Klassen, in denen Funktionalität zur Erweiterung des Models gekapselt wird. Als Beispiel dient die Tree-Behaviour: sie erweitert ein beliebiges Model um Methoden, die zur Manipulation von Baumstrukturen dienen. Man sagt, das Model verhält sich wie ein Baum (Tree) - daher der Name Behaviour. Behaviours folgen dem Prinzip Don’t repeat yourself, da sie in mehreren Models verwendet werden können.
In Models können Validierungsinformationen hinterlegt werden, die bestimmen, was Felder enthalten dürfen oder nicht. In Formularen wird dann bei Validierungsfehlern automatisch eine Fehlermeldung angezeigt.
Controller
Der Controller enthält die sogenannte Geschäftslogik und bietet Schnittstellen, um mit dieser zu interagieren. Diese Schnittstellen werden analog zu Ruby on Rails Actions genannt.
Eine HTTP-Anfrage (beispielsweise http://example.org/controller/action/parameter) enthält den Namen des Controllers und die auszuführende Methode (Action), die vom Dispatcher ausgewertet und dann an den entsprechenden Controller weitergeleitet werden. Es können auch Parameter für die Methode übergeben werden. Das Aussehen der URLs ist mithilfe von Routen sehr flexibel anpassbar.
Controller können durch Components in ihrer Funktionalität erweitert werden. CakePHP enthält selbst viele Komponenten, z. B. für die Session-Verwaltung, Request-Handling und Sicherheit. Auch Access Control Lists lassen sich realisieren.
Formulardaten, die der Controller von der jeweiligen View erhält, werden automatisch auf Malicious Code gefiltert, um SQL-Injections zu vermeiden.
View
Unter einem View versteht man die Präsentationsschicht einer CakePHP-Applikation. Es handelt sich bei einem View um ein Template, welches durch die Ausgabedaten des jeweiligen Controllers mit Inhalten gefüllt wird. Dabei kann beliebiger PHP-Code in einem Template eingebettet werden. Views können zudem auch zwischengespeichert werden.
Für sich wiederholende Ausgaben in einem Projekt kann man auf Elements zurückgreifen, welche man sich als Templates innerhalb von Templates vorstellen kann.
Außerdem gibt es Helper, die häufig wiederkehrende Codes erzeugen, wie z. B. HTML-Formulare, JavaScript-Skripte und Code für AJAX-Kommunikation mit dem Server.
In der Entwicklungsphase kann auf die Erstellung von Views auch verzichtet werden, indem man im Controller die Scaffolding-Option nutzt. Dabei werden dynamisch Views zur Manipulation der Tabellen erstellt.
Literatur
- Dirk Ammelburger, Robert Scherer: Webentwicklung mit CakePHP. O'Reilly, ISBN 3897218631
- David Golding: Beginning CakePHP: From Novice to Professional. Apress, ISBN 1430209771 (englisch)
Weblinks
- Offizielle Webpräsenz (englisch)
- CakeForge (englisch)
- CakeBakery – Artikel, News, Tutorials (englisch)
Wikimedia Foundation.