Codeigniter vs Symfony


Wer heutzutage ein Projekt mit PHP starten möchte kommt an einem guten Framework nicht vorbei. Sie erleichtern die alltägliche Arbeit und erhöhen den Schutz, insbesondere bei Zugriffen auf die Datenbank. Nun gibt es eine ganze Reihe von verschiedenen Frameworks. Codeigniter, Symfony, Yii, Zend, CakePHP und wie sie alle heißen. Jedes davon besitzt Vor- und Nachteile. Ich habe mich für mein kurzes Review zu Codeigniter und Symfony entschieden. Der Grund ist einfach: Beide Frameworks stellen das genaue Gegenteil dar. Auf der einen Seite Symfony als großer Kollos und auf der anderen Seite CI mit minimalem Funktionsumfang.

Foodprint

Wie schon erwähnt ist Symfony ein wahrer Kollos. Dies macht sich nicht nur auf der Festplatte, sondern auch im Arbeitsspeicher, bemerkbar. Der Foodprint von Symfony ist schon sehr beachtlich. Mein aktuelles Projekt an dem ich arbeite verbraucht ganze 150 MB auf der Festplatte. Den Cache-Ordner dabei nicht mitgerechnet. Das Projekt selbst besteht aus 9 Controllern und 16 Entities, welche mit Models gleichzusetzen sind. Hinzu kommen ein klein wenig Javascript Bibliotheken. Das ist schon ziemlich viel. Ein Projekt mit dem gleichen Funktionsumfang belegt in Codeigniter gerade einmal 25 MB.

Konfiguration

Viele Konfigurationsdateien
erschweren den Einstieg
Bevor es an die Arbeit geht muss ein Projekt erst einmal konfiguriert werden. Datenbank Passwort, zu ladende Bibliotheken etc. Aber auch im laufenden Entwicklungsprozess muss des öfteren an den Konfigurationen herumgeschraubt werden. Hier stellt sich Codeigniter als problemlos dar. Ein paar Handgriffe und die Konfiguration sitzt. Symfony stellt sich hier schon schwieriger an. Man hat mehrere Möglichkeiten seine Konfiguration zu schreiben (yml, xml,...) diese sind zudem auf viele Dateien aufgeteilt und erhöhen so die Übersicht. Zunächst einmal muss man hierbei anmerken, dass Symfony aus einzelnen Modulen zusammengesetzt ist. Jedes Modul kann dabei beliebig eingebunden werden. Auch können so leicht Module von Drittanbieter in dem eigenen Projekt verwendet werden. Der Nachteil dabei ist jedoch der größere Konfigurationsaufwand. Gerade Anfänger müssen hier wirklich viel Zeit investieren. Ist die Hürde jedoch einmal überwunden geht das Meiste wie von selbst.
Einen weiteren Vorteil bietet Symfony durch den Einsatz einer Konsole. Dadurch ist es möglich beispielsweise neue Benutzer ganz einfach von einem Terminal aus zu erstellen. Jedes Modul kann hierbei eigene Befehle zu Verfügung stellen, welche über die Konsole ausgeführt werden können. Ein unsicheres Admin-Pannel ist so nicht mehr nötig.

Datenbankabragen

Natürlich bleibt es jedem selbst überlassen welche Funktionen er benutzt und welche nicht. Selbst mit einem Framework kann einen niemand davon abhalten alles über die standard PHP-Funktionen zu realisieren. Ich nehme hier jedoch einmal an, dass möglichst für jede Aufgabe die Funktionen des Frameworks hergenommen werden.
Datenbanken können wie Klassen geschrieben werden
Der Umgang mit der Datenbank ist in Symfony wirklich super. Dank Doctrine, welches natürlich auch in CI verwendet werden könnte, kann ganz einfach auf Daten zugegriffen werden. Das ORM-Model von Doctrine erhöht zwar den Komfort bei dem Zugriff, kostet jedoch Performance. Ich selbst habe mich oft dabei ertappt die Abfragen selbst zu schreiben um die Zugriffe auf die Datenbank, gerade in Tabellen, gering zu halten. Gerade dass empfinde ich jedoch als Vorteil. Es bleibt einem eben selbst überlassen. So kann bei komplizierten Zugriffen auf das ORM-Model zurückgegriffen werden wohingegen bei größeren Abfragen eine Datenbankanfrage über sogenannte Repositories erfolgen kann. Auch hier unterstützt einen Doctrine. Mit dem Querybuilder ist es möglich SQL-Abfragen ohne angst vor Injections schreiben zu können. Ein ähnliches Konstrukt befindet sich in CI. Es wird dort Active Revords genannt. Durch diese ARs ist es kinderleicht sichere Queries zu schreiben.
Für mich gewinnt in dieser Hinsicht eindeutig Symfony. Mit Hilfe des ORM-Models können Datenbanken wie Klassen im Code geschrieben werden. Das Erstellen der Datenbank übernimmt Doctine für einen. Falls die Performance wichtig ist kann jedoch immer noch auf den Querybuilder zurückgegriffen werden.

Projekttauglichkeit

Ein Projekt besteht meist aus mehreren unabhängigen Baustellen. Während CI hier nur einfache Libraries bieten kann, gewinnt Symfony ganz klar durch den modularen Aufbau. Gerade in größeren Projekten ist es so möglich vielerorts an dem Projekt zu arbeiten. Zudem können alte Module ganz einfach in ein neues Projekt importiert werden.

Hilfe

Eine ausführliche Hilfe ist für ein gutes Framework das A und O. Sowohl Symfony als auch CI haben beide eine vorzügliche Dokumentation. Gewinner ist jedoch CI, da in Symfony oft Probleme gelöst werden müssen, die sehr komplex sind und durch die Hilfe nicht beantwortet werden können. So wollte ich beispielsweise einen zusätzlichen Pfad in Twig aufnehmen und habe bis heute keine einfache Lösung dafür gefunden. Auch ist es mir nicht möglich gewesen swfupload richtig in Symfony zu integrieren. Hier musste ich auf die PHP-Methoden zurückgreifen, was in einem Framework jedoch unsauber ist.

Funktionsumfang

Codeigniter bietet einen breiten Funktionsumfang und kann durch Libraries beliebig erweitert werden. Von Haus aus werden wichtige Funktionen wie der Dateiupload unterstützt. Es kann dabei sehr einfach auf PHP-Funktionen zurückgegriffen werden, falls etwas komplizierteres gelöst werden sollte.
In Symfony sieht die Sache etwas anders aus. Symfony bietet für fast alles eigene Funktionen an. Beispielsweise auch für den Zugriff auf Server-Variablen. Das Benutzen von $_SESSION ist schon unsauber und sollte nicht getan werden. Leider ist dadurch nicht immer alles lösbar und letztendlich muss doch hin und wieder der Abstractionslayer von Symfony übersprungen werden. Ich selbst hasse so etwas, da nicht konsequent gearbeitet werden kann und der Code so unübersichtlich wird. Aber wie gesagt, manchmal gibt es einfach keine andere Möglichkeit.

Geschwindigkeit

Obwohl Symfony alles mögliche unternimmt um schneller zu werden ist es enorm langsam. Da hilft auch kein Cache. Hier ist CI eindeutig der Gewinner. Geschwindigkeit ist jedoch nicht Alles. Gute Artikel darüber gibt es hier und hier.

Debugging

Gerade in PHP ist es unglaublich nervig etwas zu debuggen. Meistens muss man sich auf die Fehlerausgaben beschränken. So ist es auch in CI. In Symfony jedoch ist es richtig komfortabel. Zunächst hat man mehrere Umgebung unter denen die Ausführung ablaufen kann. Darunter auch eine Development-Umgebung. Ist diese aktiv, so erhält man eine sehr übersichtliche Fehlerseite, die sowohl den Stack Trace als auch alle ausgeführten Datenbankanfragen und Exceptions auflistet.
Die Fehlersuche in Symfony ist sehr komfortabel

Zusammenfassung

Oft wird behauptet, dass CI etwas für Anfänger währe und Symfony für Profis. Das ist so nicht richtig. Auch ein Anfänger kann gleich mit Symfony loslegen. Ahnung in PHP sollte man natürlich mitbringen.
Vielmehr entscheidet das Projekt über die Wahl. Sowohl Symfony als auch CI können für große und kleine Projekte eingesetzt werden. Generell kann man sagen, dass CI um einiges schneller ist als Symfony. Werden also viele Besucher erwartet, so sollte man auf CI zurückgreifen. Sind hingegen nur wenig Besucher zu erwarten, die jedoch viele Aufgaben erledigen möchten und einen breiten Funktionsumfang nutzen möchten, so ist Symfony zu bevorzugen. Auch in großen Projekten mit vielen Mitarbeitern würde ich Symfony empfehlen um die Übersicht zu behalten.
Natürlich darf auch die Einarbeitungszeit nicht vergessen werden. Während in CI sofort losgelegt werden kann, muss man in Symfony zuerst einmal mit einer Einarbeitungszeit von ein paar Tagen rechnen.


Bookmark and Share

0 Kommentare:

Kommentar veröffentlichen