<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=CakePHP</id>
	<title>CakePHP - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=CakePHP"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=CakePHP&amp;action=history"/>
	<updated>2026-05-28T01:44:03Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=CakePHP&amp;diff=674161&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=CakePHP&amp;diff=674161&amp;oldid=prev"/>
		<updated>2025-04-14T20:42:21Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
|Name                 = &lt;br /&gt;
|Logo                 = [[Datei:Cake-logo.png]]&lt;br /&gt;
|Screenshot           = &lt;br /&gt;
|Beschreibung         = &lt;br /&gt;
|Maintainer           = &lt;br /&gt;
|Hersteller           = [https://cakefoundation.org/ Cake Software Foundation]&lt;br /&gt;
|Erscheinungsjahr     = 2005&lt;br /&gt;
|AktuelleVersion      = 5.1.2&amp;lt;ref&amp;gt;[https://github.com/cakephp/cakephp/releases/tag/5.1.2] Aktuelles Release. Abgerufen am 16. November 2024.&amp;lt;/ref&amp;gt;&lt;br /&gt;
|AktuelleVersionFreigabeDatum = 9. November 2024&lt;br /&gt;
|AktuelleVorabVersion = &lt;br /&gt;
|AktuelleVorabVersionFreigabeDatum = &lt;br /&gt;
|Betriebssystem       = [[Plattformunabhängigkeit|plattformunabhängig]]&lt;br /&gt;
|Programmiersprache   = [[PHP]]&lt;br /&gt;
|Kategorie            = [[Webframework]]&lt;br /&gt;
|Lizenz               = [[MIT-Lizenz]]&lt;br /&gt;
|Deutsch              = Nein&lt;br /&gt;
|Website              = [https://www.cakephp.org/ cakephp.org]&lt;br /&gt;
|Dateien              = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;CakePHP&amp;#039;&amp;#039;&amp;#039;, kurz &amp;#039;&amp;#039;&amp;#039;Cake&amp;#039;&amp;#039;&amp;#039;, ist ein in [[PHP]] geschriebenes quelloffenes [[Webframework]]. CakePHP ist angelehnt an [[Ruby on Rails]] und folgt ebenfalls dem Schema des {{lang|en|[[Model View Controller]]}} (MVC). Weitere Gemeinsamkeiten mit Ruby on Rails sind die zugrunde liegenden Prinzipien {{lang|en|[[Don’t repeat yourself]]}} (DRY) und [[Konvention vor Konfiguration]].&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Abspaltung &amp;#039;&amp;#039;Lithium&amp;#039;&amp;#039; ===&lt;br /&gt;
Im Oktober 2009 verließen der Projektmanager &amp;#039;&amp;#039;Garrett Woodworth&amp;#039;&amp;#039; und Entwickler &amp;#039;&amp;#039;Nate Abele&amp;#039;&amp;#039; das Projekt, um sich [[Lithium (PHP framework)|Lithium]], einem ursprünglich als „Cake3“ geplanten Framework, zu widmen.&lt;br /&gt;
&lt;br /&gt;
== Philosophie ==&lt;br /&gt;
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.&amp;amp;nbsp;B. Models zu Datenbanktabellen geschieht über die Namensgleichheit in Singular und Plural, nicht über Konfigurationsdateien. Dieses Prinzip ist als {{lang|en|[[Konvention vor Konfiguration|Convention over Configuration]]}} (CoC) bekannt. Beispiel:&lt;br /&gt;
; Model: &amp;#039;&amp;#039;User&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Group&amp;#039;&amp;#039; (Singular)&lt;br /&gt;
; Controller: &amp;#039;&amp;#039;UsersController&amp;#039;&amp;#039;, &amp;#039;&amp;#039;GroupsController&amp;#039;&amp;#039; (Plural)&lt;br /&gt;
; Datenbanktabelle: &amp;#039;&amp;#039;users&amp;#039;&amp;#039;, &amp;#039;&amp;#039;groups&amp;#039;&amp;#039;, &amp;#039;&amp;#039;groups_users&amp;#039;&amp;#039; (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)&lt;br /&gt;
; Fremdschlüssel in Datenbanktabellen: &amp;#039;&amp;#039;user_id&amp;#039;&amp;#039;, &amp;#039;&amp;#039;group_id&amp;#039;&amp;#039; (Singular plus &amp;#039;&amp;#039;_id&amp;#039;&amp;#039;)&lt;br /&gt;
CakePHP erkennt zum Beispiel Fremdschlüssel in Datenbanktabellen automatisch und erzeugt dementsprechend die korrekten [[Relationale Algebra#Join|Joins]].&lt;br /&gt;
&lt;br /&gt;
== Besonderheiten ==&lt;br /&gt;
Im Vergleich zu anderen Web-Frameworks stellt CakePHP nur geringe Anforderungen an den Webserver.&lt;br /&gt;
Ab CakePHP 5 wird PHP 8.1 oder höher benötigt. Es verlangt keine separate [[Datenbank]] für die Anwendung, sondern erlaubt es, Datenbanktabellen mit Präfixen zu verwenden. Zugriff auf die Kommandozeile ist bei Verwendung von sogenannten &amp;#039;&amp;#039;Console Applications&amp;#039;&amp;#039; notwendig.&lt;br /&gt;
&lt;br /&gt;
== Schichten ==&lt;br /&gt;
=== Model ===&lt;br /&gt;
Als Backend einer CakePHP-Applikation kommt eine Datenbank zum Einsatz. Es werden die folgenden Datenbankmanagementsysteme unterstützt:&lt;br /&gt;
* [[MySQL]]&lt;br /&gt;
* [[PostgreSQL]]&lt;br /&gt;
* [[SQLite]]&lt;br /&gt;
* [[MSSQL]]&lt;br /&gt;
* [[Oracle (Datenbanksystem)|Oracle]]&lt;br /&gt;
&lt;br /&gt;
Das sogenannte Model stellt die vorhandenen Daten dar. In einer Benutzerverwaltung, welche mit Benutzer und Benutzergruppen arbeitet, sind die Benutzer (&amp;#039;&amp;#039;user&amp;#039;&amp;#039;) und Benutzergruppen (&amp;#039;&amp;#039;usergroup&amp;#039;&amp;#039;) die Models.&lt;br /&gt;
&lt;br /&gt;
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 (&amp;#039;&amp;#039;Model::read()&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;Model::findAllById()&amp;#039;&amp;#039;), zum Speichern der Daten in die Datenbank (&amp;#039;&amp;#039;Model::save()&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;Model::saveField()&amp;#039;&amp;#039;) oder zum Erstellen eines neuen Datensatzes (&amp;#039;&amp;#039;Model::create()&amp;#039;&amp;#039;). Somit ist die [[CRUD]]-Funktionalität in den Models schon integriert.&lt;br /&gt;
&lt;br /&gt;
Die Beziehungen zwischen verschiedenen Models werden über sogenannte &amp;#039;&amp;#039;Associations&amp;#039;&amp;#039; (Beziehungen) festgelegt. Dabei existieren folgende Möglichkeiten: hasOne, belongsTo, hasMany und hasAndBelongsToMany. CakePHP kann damit automatisch die benötigten Datenbankabfragen (inklusive eventuell benötigter &amp;#039;&amp;#039;Join&amp;#039;&amp;#039;-Befehle in SQL) generieren. Die Konfiguration geschieht durch die Einhaltung bestimmter Konventionen bei der Vergabe der Namen von Datenbanktabellen, Modellen und Controllern (siehe Abschnitt &amp;#039;&amp;#039;[[#Philosophie|Philosophie]]&amp;#039;&amp;#039;). Es werden keinerlei Konfigurationsdateien benötigt.&lt;br /&gt;
&lt;br /&gt;
Models können um &amp;#039;&amp;#039;Behaviours&amp;#039;&amp;#039; erweitert werden. Es handelt sich dabei um Klassen, in denen Funktionalität zur Erweiterung des Models gekapselt wird. Als Beispiel dient die &amp;#039;&amp;#039;Tree-Behaviour:&amp;#039;&amp;#039; sie erweitert ein beliebiges Model um Methoden, die zur Manipulation von Baumstrukturen dienen. Man sagt, das Model verhält sich wie ein Baum (&amp;#039;&amp;#039;Tree&amp;#039;&amp;#039;) – daher der Name &amp;#039;&amp;#039;Behaviour.&amp;#039;&amp;#039; &amp;#039;&amp;#039;Behaviours&amp;#039;&amp;#039; folgen dem Prinzip {{lang|en|[[Don’t repeat yourself]]}}, da sie in mehreren Models verwendet werden können.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
Der Controller enthält die sogenannte [[Geschäftslogik]] und bietet Schnittstellen, um mit dieser zu interagieren. Diese Schnittstellen werden analog zu Ruby on Rails &amp;#039;&amp;#039;Actions&amp;#039;&amp;#039; genannt.&lt;br /&gt;
&lt;br /&gt;
Eine [[Hypertext Transfer Protocol|HTTP-Anfrage]] (beispielsweise &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;http://example.org/controller/action/parameter&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) 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 &amp;#039;&amp;#039;Routen&amp;#039;&amp;#039; sehr flexibel anpassbar.&lt;br /&gt;
&lt;br /&gt;
Controller können durch &amp;#039;&amp;#039;Components&amp;#039;&amp;#039; 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 List]]s lassen sich realisieren.&lt;br /&gt;
&lt;br /&gt;
Formulardaten, die der Controller von der jeweiligen View erhält, können mit der Funktion „Sanitize“ automatisch auf [[Malicious Code]] gefiltert werden, um [[SQL-Injection]]s zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
=== View ===&lt;br /&gt;
Unter einem View versteht man die Präsentationsschicht einer CakePHP-Applikation. Es handelt sich bei einem View um ein [[Template Engine|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 [[Cache|zwischengespeichert]] werden.&lt;br /&gt;
&lt;br /&gt;
Für sich wiederholende Ausgaben in einem Projekt kann man auf &amp;#039;&amp;#039;Elements&amp;#039;&amp;#039; zurückgreifen, welche man sich als Templates innerhalb von Templates vorstellen kann.&lt;br /&gt;
&lt;br /&gt;
Außerdem gibt es Helper, die häufig wiederkehrende Codes erzeugen, wie z. B. HTML-Formulare, [[JavaScript]]-Skripte und Code für [[Ajax (Programmierung)|AJAX-Kommunikation]] mit dem Server.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Ähnliche Projekte ===&lt;br /&gt;
* [[Lithium Framework]]&lt;br /&gt;
* [[Agavi]]&lt;br /&gt;
* [[CodeIgniter]]&lt;br /&gt;
* [[Ez Components|eZ Components]]&lt;br /&gt;
* [[Kohana]]&lt;br /&gt;
* [[PHP on Trax]]&lt;br /&gt;
* [[Symfony]]&lt;br /&gt;
* [[Zend Framework]]&lt;br /&gt;
* [[Zikula]]&lt;br /&gt;
* [[Fusca RefactorPHP]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Dirk Ammelburger, Robert Scherer: &amp;#039;&amp;#039;Webentwicklung mit CakePHP&amp;#039;&amp;#039;. O’Reilly, ISBN 3-89721-863-1&lt;br /&gt;
* David Golding: &amp;#039;&amp;#039;Beginning CakePHP: From Novice to Professional&amp;#039;&amp;#039;. Apress, ISBN 1-4302-0977-1 (englisch)&lt;br /&gt;
* Ahsanul Bari, Anupom Syam: &amp;#039;&amp;#039;CakePHP Application Development: Step-by-step introduction to rapid web development using the open-source MVC CakePHP framework&amp;#039;&amp;#039;. Packt Publishing, ISBN 978-1-84719-389-6 (englisch)&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://cakephp.org/ Offizielle Webpräsenz] (englisch)&lt;br /&gt;
* [https://bakery.cakephp.org/ CakeBakery] – Artikel, Nachrichten, Einführungen (englisch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Freies PHP-Webframework]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>