CakePHP, der süß-saure Kuchen – Erfahrungen mit dem PHP-Framework

Vor einigen Wochen war ich auf der Suche nach einem leistungsfähigem PHP-Framework für eine Webanwendung. Meine Wahl fiel Mitte September auf CakePHP, einem modernen Anwendungs-Framework, welches die Entwicklung von robusten interaktiven Internetseiten beschleunigen soll.

Die Entscheidung war schnell getroffen, denn die schicke Internetseite von CakePHP überzeugt sehr schnell, besonders die Screencasts machen Lust auf mehr und geben einen guten Einblick in die Model-View-Controller-Funktionsweise.

Voller Eifer beginnt man also mit der Entwicklung und freut sich darauf, so nette Features wie die dynamischen Funktionen der Daten-Modelle zu nutzen: Der Aufruf $User->findByName('Thorsten'); beispielsweise funktioniert, da es in der Datenbank eine Spalte ‘Name’ in der ‘User’-Tabelle gibt. CakePHP erkennt dies automatisch und erzeugt eine korrekte SQL-Abfrage für den Methodenaufruf … und das obwohl diese Funktion zur Kompilierzeit noch nicht einmal existiert. Ich werde jetzt nicht genauer darauf eingehen, wie diese “Magic” funktioniert, aber auf jeden Fall ist es cool :-)

Nach den ersten Stunden Arbeit mit CakePHP war ich recht beeindruckt, wie einfach doch alles funktioniert. Selbst HTML-Formulare kann man sehr schnell “backen”. Doch stößt man auch schnell auf Beschränkungen, sobald man etwas kompliziertere Eingabeelemente realisieren will. Das automatische Anzeigen von Aufzählungen (enum) oder aber von mehrfach-selektiertbaren Listen ist z.B. nicht vorgesehen … gut, muss man halt selber Hand anlegen.

Anschließend wollte ich komplizierte Daten (Tabellen mit mehreren N:M Relationen) mit CakePHP abfragen und bearbeiten, was aber erstmal nicht klappte.

Datenmodell (Beispiel) ohne Nutzung von CakePHP

Datenmodell (Beispiel) ohne Nutzung von CakePHP

Ich hatte in meiner N:M-Tabelle (also z.B. Posts_Has_Tags) nicht nur die zwei elementaren Fremdschlüssel, sondern noch weitere Felder gespeichert. Das mag CakePHP leider gar nicht! Es gibt zumindest auf den ersten Blick keine Möglichkeit an diese Daten ranzukommen, da man normalerweise nicht direkt auf diese Tabellen zugreift … sehr ärgerlich.

Zudem kam noch ein weiteres Problem dazu: In einer N:M-Tabelle besteht der Primärschlüssel meist aus der Kombination der beiden Fremdschlüssel. Logisch … leider kann auch damit CakePHP nicht umgehen, denn das Framework zwingt einen Primärschlüssel zu nutzen, die lediglich aus einem Feld bestehen!

Verändertes Datenmodell für CakePHP

Verändertes Datenmodell für CakePHP (andere Primärschlüssel, schwieriger Zugriff auf rot eingerahmtes Feld)

Gerade der letzte Punkt stört micht doch ungemein, da ich es als nicht besonders schön empfinde ein Datenmodell nur zu ändern, weil ein Framework damit nicht klar kommt. Ich habe zwar gelesen, dass auch demnächst keine mehr-elementrigen Primärschlüssel unterstützt werden, doch ich hoffe mal weiter …

Mein Fazit: CakePHP ist ein Framework, welches sehr schönen Code ermöglicht und die Entwicklung vieler Anwendungsbestandteile beschleuinigt. Lobend kann man an dieser Stelle z.B. die HTML- und Javascript/Ajax-Helper hervorheben … auf der anderen Seite ist CakePHP an einigen Stellen noch zu unflexibel. Der Einsaz lohnt sich aber auf jeden Fall … ich bin gespannt wie sich das Projekt weiterentwickelt :-)