CodeIgniter ist ein Open Source Web Application Framework für das Entwickeln von dynamischen Webseiten mit PHP. Wie jedes andere Framework verspricht CodeIgniter das schnelle Entwickeln von Applikationen. CodeIgniter selber versteht sich als MVC-Framework und teilt sich daher mit CakePHP, Symfony und Zend Framework das Revier. Die Featureliste ist nicht besonders beeindruckend, dennoch für den Alltagsgebrauch ganz nett zu gebrauchen.
- Mehrere Datenbanksystemen
- Active Record
- Sessionverwaltung
- Validatoren für Form und Daten
- Caching
- Scaffolding
- Template Engine
- Support für Hooks, Class Extensions und PlugIns
- Unit Testing Class
- SEO optimierte URLs
Und noch einige andere Kleinigkeiten. Insgesamt wirklich nichts beeindruckendes. Features wie ‘SEO optimierte URLs’ oder Class Extensions sind einfach ein Witz wie man später erfahren wird. Der Grund warum ich mich mit dem Framework beschäftigt habe liegt an den zahlreichen Projekten, die mit CodeIgniter umgesetzt wurden und nicht auch letzendlich daran, dass das Framework überall als leichtgewichtigt und schnell gelobt wird. Was man dem Framework wirklich gut schreiben kann ist die wirklich enorm schnelle Einarbeitungszeit. Für erfahrene Entwickler die bereits Erfahrung mit dem MVC-Entwurfsmuster und objektorientierte Programmierung gemacht haben ist der Einstieg sehr einfach und es verwundert nicht, dass es anscheinend sehr viele Programmierer gibt, die ihren Einstieg in Frameworks mit CodeIgniter wagen.
Warum ein Framework?
Ein Framework kann die Entwicklungszeit für ein Projekt drastisch verkürzen. Besonders bei Webapplikationen werden inzwischen viele ehemals neue Features als Standard angesehen. Ob es nun das Speichern von Daten, serverseitige Validierung von Formularen, Captchas oder Authentifizierung ist, es gibt kaum ein Feature dass nicht schon einmal programmiert wurde. Die Frage ist natürlich, ob es Sinn macht, bereits programmierte Features wieder und wieder runterzuschreiben. Mit der Zeit haben sich dann Klassenbibliotheken durchgesetzt, meist lose Sammlungen von Codeschnippsel, zusammmengetragen durch zahlreiche Entwickler, die im Laufe der Zeit größer und größer geworden sind. Mit der Größe ist dann auch die Qualität der Bibliotheken gestiegen. Bekanntestes Beispiel ist zum Beispiel PEAR. Leider ist die Qualität der PEAR Klassen nach wie vor von sehr unterschiedlicher Qualität.
Und anscheinend waren ziemlich viele PHP Entwickler mit dem was PEAR, ezComponents und Co. bereitstellten zufrieden. Die Freude hielt nicht lange, denn ein neuer Stern am Himmel der Webentwickler wartete darauf, entdeckt zu werden. Der Stern hieß Ruby on Rails und ist eigentlich ein Kristall auf dem steilen Weg nach Oben. Ruby on Rails gehörte zu den ersten Webframeworks, die das MVC-Pattern salonfähig machten. Während die PHP Programmierer immer noch die gesamte Applikationslogik mitsamt tabellenbasierten Teplate in eine ‘index.php’ verfrachteten, freute sich die Ruby on Rails Community darüber, sexy
Anwendungen schreiben zu können, die nicht nur dank CSS, 2-Step Layout, Models, ORM, Controllern und Co. einfach zu warten ist, sondern auch verdammt schnell zu entwickeln ist.
Das Ergebnis aus dieser Lehre waren dann Symfony und CakePHP. Wenig später gesellte sich dann auch Zend dazu und zeigte mit dem Zend Framework, wie professionelle Softwareentwicklung mit PHP auszusehen hat. Inzwischen gibt es mehrere dutzend Frameworks, die populärsten dürften aber in ungeordneter Reihenfolge sein:
- CakePhp
- Symfony
- Zend Framework
- CodeIgniter
- Prado
- ezComponents
Lernkurve
In CodeIgniter einzusteigen ist ziemlich einfach. Das liegt eventuell an der gut durchdachten Ordnerstruktur, eventuell aber auch an der wirklich sehr einfach zu verstehende Dokumentation. Ich hab mir gar nicht erst die Mühe gemacht und mir die Dokumentation angeschaut, für was gibt es denn Videotutorials. Und 30 Minuten später war ich der festen Überzeugung, dass wirklich jeder halbwegs begabter PHP Entwickler damit auskommen muss. Ob es nun eine einfache Webseite sein soll oder sogar ein etwas komplexes System, es gibt für kleine bis mittlere Projekte meiner Meinung nach allerhand Projekte die man damit umsetzen kann.
Besonderheiten
Als Erstes fällt auf, dass das gesamte Framework in PHP4 programmiert ist. PHP4 anno 2009? Geht ja wohl gar nicht. Ich verstehe durchaus das Argument abwärtskompatibilität aber eventuell sollten sich die Entwickler darüber bewusst werden, dass der Support für PHP4 eingestellt wird. Dementsprechend kann man in den Klassen auch nicht die Sichtbarkeit von Attributen und Methoden definieren. Ein typischer Kontroller schaut so aus:
class GetFeed extends BaseController {
public function GetFeed()
{
parent::BaseController();
}
/**
* this should be the start page
* build the feeds and so on
*
*/
function index()
{
}
}
Nicht gerade die eleganteste Art, es erfüllt aber seinen Zweck. Im Grunde genommen ist es gar nicht so schlecht, dass Einsteiger nicht mit PHP5 typischen Sprachkonstrukte erschlagen werden. Das macht in meinen Augen Sinn, da der Programmierer sich auf die eigentliche Tätigkeit konzentrieren kann. Für mich ist es dennoch sehr stark gewöhnungsbedürftigt. Das geht dann weiter mit so interessanten Konzepte wie die ‘autoload’ Klasse die eigentlich gar keine ist.
$this->load->library('classname');
$this->classname->method();
Das verbietet nicht nur den Gebrauch von statischen Methoden, sondern macht es auch absolut unmöglich, Parameter an den Konstruktor zu übergeben. Eventuell gibt es auch eine Möglichkeit, aber ich komme einfach nicht drauf. Die Klasse wird nämlich sofort nach dem Laden instanziert. Aber Gott sei Dank ist man ja nicht darauf beschränkt, den Pseudo-Autoloader zu benutzen.
Abseits dieser Merkwürdigkeiten hat das Framework auch so seine Vorteile und zwar seine restriktive Art. Es mag sein, dass es Leute gibt, die meinen, dass dieses Framework das Non-Plus-Ultra in Sachen Webentwicklung ist, ich find es nicht, nicht mal ansatzweise. Was ich am CodeIgniter aber schätze ist, dass man mit einer Installation fast schon ein vollwertiges Webprojekt hat. Hier noch ein paar Views, da paar Controller und Action und fertig ist die selbstgeschusterte Webanwendung. Man kann mir erzählen was man mag, schneller hab ich noch nie eine fertige dynamische Webanwendung entwickelt. Das Resultat ist ein RSS Aggregator in nicht mal eine Stunde! Natürlich ist das Tool absolut noch verbesserungswürdig aber für ein erstes Prototyping bin ich trotz der merkwürdigen Codebasis sehr zufrieden.
Ein weitere Vorteil ist, dass die gesamte Installation gepackt nicht mal 700kb groß ist. Verglichen mit Zend, das locker mal 20MB groß ist, ist das für mich das Pro-Argument überhaupt. Wer heute Anwendungen vertreiben möchte, wird die schlanke Codebasis von CodeIgniter zu schätzen lernen.
Fazit
Mir fehlt leider die wirkliche Erfahrung mit CodeIgniter um mir ein wirklich neutrales Bild machen zu können. Was ich aber bisher gesehen habe taugt absolut für das Rapid Prototyping einer Webapplikation. Hierfür sind Codequalität und Stabilität sowieso nicht von Bedeutung. Wenn es nur darum geht, Features zu implementieren und neue Sachen auzuprobieren, ist das Ding einfach unschlagbar und wer weiss, spätestens wenn eine PHP5 Version kommt würde ich mir sogar einen Einsatz im Unternehmen vorstellen können.