CakePHP
CakePHP
| |
---|---|
![]() | |
![]() Das offizielle CakePHP Logo | |
Basisdaten
| |
Entwickler | Cake Software Foundation |
Aktuelle Version | 1.1.18.5846, 1.2.0.5847pre-beta (22. Oktober 2007) |
Betriebssystem | plattformunabhängig, da auf PHP basierend |
Programmiersprache | PHP[1] |
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). Eine weitere Gemeinsamkeit mit Ruby on Rails ist das zugrunde liegende Prinzip Don't Repeat Yourself (DRY).
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 versucht man auch bei CakePHP die Konfiguration auf das 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. 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 wenige Anforderungen an den Webserver. Es unterstützt PHP5 und das noch weit verbreitete PHP4. Des weiteren benötigt es keine eigene Datenbank für die Anwendung, sondern erlaubt es Datenbanktabellen mit Präfixen zu verwenden. Einzig für die Verwendung des Code-Generators Bake ist ein Zugriff mittels der Kommandozeile notwendig.
Schichten
Model
Als Backend einer CakePHP-Applikation kommt eine Datenbank zum Einsatz. Es werden folgenden Datenbanken unterstützt: MySQL, PostgreSQL und ein Wrapper für ADOdb.
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.
In Models können auch 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 werden und dann an den entsprechenden Controller weitergeleitet werden. Es können auch Parameter für die Methode übergeben werden. Man kann das Aussehen der URLs mit Hilfe von Routen sehr flexibel anpassen.
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-Injektionen 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 gecachet 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 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.
Siehe auch
Ähnliche Projekte
Weblinks
- Offizielle Website
- CakeForge
- CakeBakery Artikel, News, Tutorials
- ↑ The cakephp Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 18. Juli 2018).