Codeigniter

Webdesign mit PHP

Vor kurzem haben wir unser erstes Projekt mit Codeigniter umgesetzt und online gestellt. Da wir sonst alle Projekte mit Java basierten Webframeworks umsetzen, war das PHP basierte Codeigniter eine echte Premiere für uns. Das schöne an der Web Entwicklung mit PHP ist für mich die Geschwindigkeit und die Einfachheit, mit der man Projekte abschliessen kann. Änderungen am Code sind mit einem einfachen Refresh im Browser sofort sichtbar (wie in allen PHP Anwendungen). Um dieses Verhalten unter Java hinzubekommen, muss man sich schon ordentlich strecken bzw. viel mehr machen.

Codeigniter ist ein Model-View-Controller basiertes Webframework, genau wie Grails oder Spring MVC in der Java Welt. Alle eingehenden Requests werden auf einen Controller gemapped. Das funktioniert ganz automatisch, wenn man sich an fest vorgegebene Konventionen bezüglich Benennung und Verzeichnissen hält (Stichwort Convention over Configuration). Es ist möglich eigene Regeln für das Mapping von Request auf Controller festzulegen. Das geschieht in der Datei routes.php, beispielsweise so:

$route['default_controller'] = "page";
$route['ratgeber/(:any)'] = "ratgeber";
$route['scaffolding_trigger'] = "";


Hier wird festgelegt, dass die Controller standardmässig "Page" heissen. Es ist möglich Reg-Ex ähnliche Regeln für die Weiterleitungen anzugeben. Das sieht man beispielsweise in Zeile 2. Alle Requests, die mit dem URL Segment "rategeber" anfangen, werden vom "Ratgeber" Controller behandelt, egal was danach in der URL kommt.

Jeder Controller führt zunächst seine Geschäftslogik und zum Schluss einen Aufruf zum Schreiben der benötigten View aus. Für bestmögliche Wiederverwendbarkeit empfiehlt es sich die Template Bibliothek einzusetzen. Das einfache Einbinden aller möglichen 3rd Party Bibliotheken oder Plugins, ist definitiv eine Stärke von Codeigniter. Mit der Template Bibliothek kann man eine HTML Vorlage in mehrere Bereiche aufteilen (Header, Menu, Content, Footer etc.) Die Aufteilung der Seite wird zunächst in der Datei config/template.php definiert:

$template['active_template'] = 'default';
$template['default']['template'] = 'template.php';
$template['default']['regions'] = array( 'html_head', 'searchbox', 'menu', 'page_head', 'body', 'footer' );


Der Controller muss dann lediglich eine View in jeden Template Bereich laden.

private function _renderMenu() {
   $this->template->write_view('menu', 'common/menu', array('menu' => $this->menu));
}


Hier wird der Template Bereich "menu" mit der View Datei "common/menu.php" geladen. Der dritte Parameter ist für Daten, die man an die View übergeben will. Dafür verwendet man in der Regel das Model wenn man ein MVC basiertes Webframework einsetzt. In Codeigniter ist ein Model allerdings etwas anders definiert, was zunächst häufig für Verwirrung sorgt. In CI übergebt ihr der View vom Controller aus kein Model, sondern beliebige PHP Variablen als Array. In der View selbst gibt es keinen Zwang eine Template Engine wie Smarty einsetzen zu müssen, so dass man dort ganz normalen PHP Code schreiben kann. Das hat natürlich Vor- und Nachteile. Ich persönlich finde es okay Markup und PHP Code zu mixen, da man so schneller entwickeln kann.

Codeigniter selbst ist eine sehr schlanke Bibliothek mit geringem Footprint. Anders als andere PHP Webframeworks wie beispielsweise Zend, wird der HTML Output sehr schnell gerendet. Dieses Statement basiert allerdings auf den Aussagen anderer Entwickler, nicht meiner persönlichen Erfahrung. Wie gesagt, CI war das erste PHP Projekt das wir umgesetzt haben. Nachteilig finde ich bei Codeigniter eigentlich nur zwei Dinge. Das Debugging ist nicht besonders gut gelungen. Beim Auftreten von Fehlern wird man fast immer im Regen stehen gelassen, beispielsweise wenn der Aufruf einer URL die 404 Seite ausspuckt. Dann hilft es meistens nur überall DEBUG statements einzubauen um nachzuvollziehen was passiert. Darüber hinaus ist das Umsetzen umfangreicherer Use Cases nicht so straight forward. Wir haben für unser Projekt beispielsweise eine Pflegeseite angelegt, mit der man neue Content Inhalte für die Datenbank einpflegen kann. Dort ist es unter anderem möglich Bilder hochzuladen, die dem Redakteur dann in einer Preview gezeigt werden. Das Zusammenspiel von multipart Upload, Form Validierung, Zwischenspeicherung von Upload Daten bei Validierungsfehlern war aufwändiger als erhofft. Hier bietet Code Igniter leider kein Plugin was out-of-the-box funktioniert. Der Controller, der die Pflegeseite bedient ist leider ziemlich umfangreich geworden. Der Upload von Bildern und die Einbindung eines Rich-Text Editors waren dagegen kinderleicht.

Fazit: Codeigniter ist für kleine Projekte, die auf dem LAMP Stack laufen sollen, einfach genial. Die Einarbeitung in das Framework geht schnell und die Community antwortet immer schnell auf Fragen. Die Früchte der Arbeit erntet man eigentlich erst mit dem zweiten Projekt, bei dem man dann einfach nur noch das Template Layout tauschen muss.



Webdesign Blogkanzelbahn.de © 2007 • ImpressumWir über uns