Anzeige
Anzeige
UX & Design
Artikel merken

Rapid Prototyping Framework: CakePHP

Eine verlässliche und flexible Architektur ist für den Bau einer Webapplikation unerlässlich. CakePHP bietet eine Infrastruktur, um Ideen und Aufgaben schnell und elegant umzusetzen und bewahrt dem Webentwickler zudem die Flexibilität, auf neue Anforderungen reagieren zu können. Eine aktive Community und eine gute Dokumentation helfen, den eigenen Fokus auf das Wesentliche zu lenken.

6 Min. Lesezeit
Anzeige
Anzeige

David Heinemeier Hanson hat mit Ruby on Rails vorgemacht, wie man in 15 Minuten sein eigenes Blog programmiert [1]. Das hat für Inspiration in anderen Projekten gesorgt und bewirkt, dass heute fast alle Skriptsprachen mit einem vergleichbaren Framework daherkommen. CakePHP ist ein solches MVC-Framework für PHP 4 und 5.

Make my day

Anzeige
Anzeige

Zwei wichtige Grundsätze, aus denen sich eine Produktivitätssteigerung ergibt, sind „Don’t Repeat Yourself“ (DRY) und „Convention over Configuration“, also die sinnvolle Wahl von Konventionen. Zum einen sollte man sich nicht ständig wiederholen, da dies Wartung und Refactoring (Grundlegende Optimierung der Code-Struktur) meist aufwändiger macht. Zum anderen kann man sich gut auf einen Basissatz von Konventionen einlassen, wenn ein klar erkennbarer Sinn dahinter steht und das Framework nicht im Weg ist, wenn man etwas anders machen möchte. In der Wahl des für sich geeigneten Frameworks spielt die Akzeptanz dieser Konventionen eine wichtige Rolle. Nur so lässt sich eine Produktivitätssteigerung erreichen.

Scaffolding ist ein von Ruby on Rails übernommener Begriff, der im Deutschen soviel wie Baugerüst bedeutet. Übertragen liefert das PHP-Framework also ein Grundgerüst für den ersten Prototypen. CakePHP bietet dazu das bake.php-Skript auf der Kommandozeile. Mit einem Wizard generiert man die typischen CRUD-Methoden (übliche Datenbankzugriffe wie Create, Retrieve, Update, Delete) eines Models, inklusive Templates, Validierung und Ablauf. Auf diesem Ergebnis aufbauend kann man dann eventuelle Anpassungen vornehmen und so eine erste Basis als Diskussionsgrundlage für ein neues Projekt erstellen.

Anzeige
Anzeige

MVC

Grundsätzlich wird eine CakePHP-Applikation per Konvention über das Entwurfsmuster MVC (Model-View-Controller) strukturiert. Daraus ergibt sich eine saubere Trennung zwischen Daten, Ablaufsteuerung und Präsentation. Das Model ermöglicht den einfachen Zugriff auf die Datenbank sowie die Definition von Validierungen und Assoziationen. Reguläre Ausdrücke validieren die Daten, wobei es für den Anfänger auch ein paar vordefinierte Konstanten wie VALID_EMAIL, VALID_NUMBER oder VALID_NOT_EMPTY gibt. Komplexere Validierungen mit Abhängigkeiten sind problemlos möglich, ohne dass die Model-Klasse dabei an Übersicht verliert.

Anzeige
Anzeige
PHP
class User extends AppModel {
	var $name = 'User';
	var $validate = array('email'=>VALID_EMAIL);
	function beforeSave() {
		if (isset($this->data['password']) {
			$this->data['password'] = md5($this->data['password']);
		}
	}
}

Listing 1

Der Controller nimmt das Request entgegen und delegiert meist ausschließlich innerhalb einer Methode den Ablauf von der Model-Ebene bis zum Template. Die Applikation baut automatisch eine URL-Struktur anhand der vorhandenen Controller auf (z. B. /users/login/), sofern „mod_rewrite“ im Apache aktiviert ist.

Die Views (Templates) bestehen aus reinem HTML und PHP. Man benutzt lediglich Schleifen und Verzweigungen, um die dynamischen Inhalte in den HTML-Code einzufügen. Dabei wird man tatkräftig von den in CakePHP bereits vorhandenen HTML-, Form- bzw. Ajax-Helpern unterstützt. Ein von Helpern generiertes Formular ist so im Handumdrehen erstellt, wird sofort validiert und in der Datenbank gespeichert.

Anzeige
Anzeige

In die wichtigsten Methoden, die von Model (find/read, save) und Controller (render) mitgebracht werden, kann man über Callbacks wie „beforeSave()“ eingreifen. In Listing 1 wird bei jedem Speichern eines Users geprüft, ob das Passwort gespeichert werden soll. Wenn ja, wird es vorher über einen MD5-Hash kodiert. Applikationsweite Modifikationen der Model- und Controller-Klassen können im AppController respektive AppModel eingefügt werden. So spart man sich Wiederholungen in allen oder zumindest in vielen Controllern/Models.

Handwerkszeug

Controller übergreifende Funktionalität, die keinem Model zugehörig ist, wird in Komponenten untergebracht. Ab Version 1.2 gibt es auch für das Model sogenannte „Behaviours“, wodurch ein Model mit gewissen Charaktereigenschaften ausgestattet werden kann. CakePHP liefert bereits Komponenten für Security-, Session- und Request-Handling mit. Diese helfen in der Applikation dabei, Zugriffe auf die Session-Variablen zu vereinheitlichen oder festzustellen, ob der Request per Ajax gestellt wurde. Hilfreich ist auch die Sanitize-Klasse, mit der man spielend leicht sämtliche Formulareingaben von potenziellen Cross-Site-Scripting-Gefahren befreien kann. Grundsätzlich befreit einen der Einsatz von CakePHP aber nicht davon, sich Gedanken über Sicherheitsaspekte zu machen.

Schön ist, dass die eigenen Komponenten in neuen Projekten problemlos wiederverwendet werden können. Am besten teilt man diese direkt mit der CakePHP-Community auf CakeForge [2]. Dort existiert bereits eine Vielzahl von Komponenten, meist mit dazugehörigen Artikeln in der Bakery [3] (Artikel- und Tutorialsammlung, die das alte Wiki abgelöst hat).

Anzeige
Anzeige

Steht man noch ganz am Anfang, hilft meist ein erster Blick ins Handbuch. Dort werden die Bausteine des Frameworks mit Codebeispielen sehr gut erklärt. Unterstützung findet man auch in der Google Group cake-php [4]. Dort hat man Zugriff auf eine große Zahl bereits gestellter Fragen. Neue Fragen an die Liste oder im IRC werden meist schnell beantwortet, sowohl von der Community als auch vom Entwicklungsteam selbst. Auch in den vielen Blogs wie ThinkingPHP, CakeBaker oder der deutschen CakeBakery [5] findet man meist gute Tipps.

Test-driven Development in PHP?

Wer sich nicht darauf verlassen möchte, dass ein schneller Hotfix irgendwie gut geht, kann seine Model mit Unit Tests versehen und bequem über die Weboberfläche der Testsuite von CakePHP bedienen. Diese basiert auf SimpleTest und ist mit anderen xUnit-Implementationen vergleichbar.

Test-driven Development wird in der Community noch ein wenig stiefmütterlich behandelt, die Wahl liegt beim Entwickler. Nach der Erfahrung des Autors ist es jedoch sinnvoll, den eigenen Entwicklungsprozess stetig zu verbessern – CakePHP macht den Einstieg dabei sehr leicht.

Anzeige
Anzeige

Buzzword 2.0

Wer das Interface seiner Applikation ein wenig moderner gestalten möchte, wird auch hier von CakePHP unterstützt. Der Ajax-Helper generiert häufig verwendete JavaScript-Funktionalitäten wie Autocomplete-Eingabefelder, das Abschicken von Formularen oder Drag & Drop direkt in die Templates, so dass auch unbeholfene Programmierer in den Genuss von XmlHttpRequests in der eigenen Applikation kommen. Der Helper verwendet dazu die beiden JavaScript-Bibliotheken Prototype und Scriptaculous. Diese sind in ihrem Gesamtumfang nicht gerade klein, deshalb sollte man darauf achten, sie nur an der richtigen Stelle einzubinden. Bevorzugt man eine andere JavaScript-Bibliothek, etwa jQuery, lässt man den Ajax-Helper einfach weg.

Performance

Grundsätzlich bringt ein Framework einen Overhead mit sich. Auf der anderen Seite liefert es meist auch die Stellschrauben, um gerade die performancekritischen Bereiche zu optimieren.

Bei der agilen Entwicklung sollte man sich zunächst auf die Applikation selbst konzentrieren. Erst anschließend empfiehlt es sich herauszufinden, wo die Schwachstellen liegen. Da die Einschätzungen dazu während der Entwicklung häufig falsch sind, vermeidet man durch dieses Vorgehen unnötige und zeitintensive Verbesserungen, die sich später als überflüssig herausstellen. Profiling, also die Analyse des Programmcodes auf Geschwindigkeit und Ressourcennutzung, gibt meist deutlich bessere Aufschlüsse darüber, wo der Schuh drückt.
Bei CakePHP-Applikationen bedeutet dies meist, dass man Datenbankanfragen optimiert (Entfernen von Assoziationen mit „unbindModel“), das Caching aktiviert und auf jeden Fall einen OpCode-Cache [6] auf dem Server installiert. Allein dadurch tritt der Overhead des Frameworks vollkommen in den Hintergrund. Eine gute Einführung in das Caching mit CakePHP findet man im letzten Teil der IBM-Serie „Cook web sites fast with CakePHP“ [7].

Anzeige
Anzeige

Fazit

CakePHP ist ein robustes Framework, dessen Community im letzten Jahr enorm gewachsen ist. Rapid Prototyping heißt dabei nicht, dass CakePHP nur ein Toolkit zur Erstellung von Click-Dummies oder Konzeptvisualisierungen ist. Die Einsatzgebiete sind vielfältig und das Framework sorgt dafür, das Entwickler während eines Projekts weder den Spaß am eigenen Code noch den Überblick darüber verlieren. So wird man zwar nicht zum besseren Programmierer, aber die Konzentration auf die wesentlichen Aufgaben fördert die Qualität und die Produktivität enorm.

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
Ein Kommentar
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Olav Schettler

In einem aktuellen Projekt habe ich festgestellt, dass sich CakePHP auch hervorragend als Frontend für TYPO3 eignet. Mit dieser Integration gelingt es uns, produktive Entwicklung von individuellen und innovativen Features im Frontend mit einem mächtigen Redaktionssystem zu kombinieren, ohne das Rad in die eine oder andere Richtung neu erfinden zu müssen. Die Software für diese Integration ist Open Source und kann unter schettler.net/fossil/t3c heruntergeladen werden.

Antworten

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige