Hier möchte ich einmal kurz beschreiben, was das Symfony-Framework ist und wie ich dazu kam. Es gibt eine fast unüberschaubare Menge an PHP5-Frameworks. Ich hatte zu Beginn meiner Recherchen ca. 6 Frameworks in der engeren Auswahl. Es kristallisierte sich aber sehr schnell heraus, dass jedes seine Vor- aber noch mehr Nachteile hat. Ein Framework gefiel mir wirklich gut, aber es gab kaum eine Community dazu und es schien nicht mehr recht gepflegt zu sein. Symfony basiert auf Mojavi. Mit Mojavi wiederum hatte ich in meiner vorhergehenden Firma zu tun, das vorhandene System, war ein Mojavi System. Anfangs hatte ich wirklich Probleme mich in die nicht prozedurale Denkweise hinein zu versetzen. Letztendlich bin ich froh, dass ich Mojavi kennen gelernt habe, denn nur so konnte ich die enormen Vorteile von einem Framework verstehen.
Mojavi stand ja auch auf meiner Liste, der zu überprüfenden Framworks, aber eine entscheidende Sache störte mich daran; Mojavi wird von einer Person entwickelt und das in der Freizeit. Ich möchte nicht behaupten, dass das ein Einzelner nicht schaffen kann, aber eine Community kann viel eher Sicherheitslecks entdecken und die Entwicklung vorantreiben. Oder aber andererseits, wie bei Symfony, wenn eine Firma dahinter steht hat diese ein kommerzielles Interesse, dass das System reibungslos läuft. Symfony ist und bleibt trotzdem Open Source und kostenfrei.
So nun aber zum Framework. Laut Symfony-Seite lesen sich die Vorteile wie folgt:
- simple templating and helpers
- cache management
- smart URLs
- scaffolding
- multilingualism and I18N support
- object model and MVC separation
- Ajax support
- enterprise ready
Zum ersten Punkt, „einfaches Template-System und die Helper„. Da kann ich nur sagen: „Absolut“. Es ist sehr einfach, in Symfony durch die Helper z.B. Formulare zu erstellen.
echo select_tag('land', objects_for_select($laender]));
Man hat mit dieser Zeile bereits einen Select-Tag geschrieben. Man muss sich bei den Helpern nicht um HTML-Syntax kümmern, das wird alles automatisch generiert. Zum Template System möchte ich noch hinzufügen, dass es sehr einfach gehalten ist, es muss alles dynamische in <?php ?> eingefügt werden. Es ist also nicht nötig wie mit Smarty eine neue Syntax zu lernen.
Das Cache Management ist wirklich gut. Man kann sehr fein gliedern welche Teile man cachen möchte und welche dynamisch bleiben sollen.
Smart URLs – sind auch aus der heutigen Netzwelt nicht mehr wegzudenken. Durch das zusätzliche Routing, kann man sehr einfache URLs erstellen, welche man auch bewerben kann. Z.B. www.beispiel.de/suche anstatt www.beispiel.de?module=suche&action=index.
Scaffolding – Es ist möglich, wenn man das Datenmodell in Symfony richtig hinterlegt, ohne eine Zeile Code, eine Backendanwendung zu generieren. D.h. man kann nach der Generierung Daten in die Tabelle eintragen, bearbeiten und löschen.
Den Multilingualen Teil konnte ich zum Glück außen vor lassen. In meiner letzten Firma sollte die gesamte Seite in 22 verschieden Sprachen erscheinen. Geschafft hatten wir immerhin 12. Es wird aber mit der Masse der Sprachen immer schwerer den Überblick zu behalten, welche Teile bereits übersetzt (bzw. aktualisiert) sind und welche nicht. Ich bin mir aber sicher, dass das Symfony Team auch hier bei der Implementierung gute Arbeit geleistet hat.
MVC – Als „Neuling“ braucht man eine ganze Weile, bevor man hinter die Logik der Umsetzung gestiegen ist. Dass diese Trennung bei großen Softwareprojekten unumgänglich ist leuchtet schnell ein, aber welcher Teil zu Präsentation, welcher zum Modell und welcher zum Controller passt, ist anfänglich verwirrend. Ein Schleife, würde man denken, gehört nicht in die Präsentation. Wenn es aber nur darum geht, eine Liste, die in einem Array oder Objekt steckt, darzustellen, dann kann man es in der View „machen“.
Ajax Support – hier muss ich die heiligen Hallen von Symfony verlassen. Es wurde sicherlich viel Arbeit in die Implementierung von Ajax und der automatischen Codegenerierung gesteckt. Aber nach einem Monat Programmierung habe ich davon wieder abstand genommen.
- Ist mir die Dateigröße des zu Grunde liegenden Prototype zu groß
- Ist mir der generierte Code teilweise zu aufgebläht, mit jQuery kann ich ein und die selbe AJAX-Aktion durch CSS-Selektoren dutzenden Elementen zuweisen. Das soll wohl auch mit Prototype gehen, aber ich finde es wesentlich einfacher mit jQuery.
- Die Geschwindigkeit des Codes hat mir auch Probleme bereitet. Als ich eine Aktion ca. 60 Links zugewiesen hatte, kam der Browser schon ins straucheln. Dabei ging es nur um das aus und wieder einblenden, von Navigationspunkten.
Enterprise ready – Kann ich nur bestätigen. Ich verwende Symfony 1.0 bei unserer Firmenseite und kann nur sagen: „Ich bin sehr zufrieden„.
Zusammenfassend kann man sagen:
- Symfony ist ein sehr schnelles, stabiles PHP5-Framework welches sich für viele Einsatzzwecke eignet.
- Durch die Abstraktion der Datenbankzugriffe könnte man auch das SQL-System ohne Probleme wechseln.
- Die Programmierung ist wesentlich schneller, da man sich z.B. nicht mehr mit Session-Management, Cache-Problemen, Datenbankspezifischer Anbindung, E-Mailgenerierung oder falsch geschriebenen HTML-Tags in Formularen, herumschlagen muss.
- Nicht zuletzt gibt es ein Buch das kostenlos online gelesen werden kann. Dieses Buch ist nicht nur eine Dokumentation sondern auch eine Programmierhilfe mit vielen Beispielen.
- Es gibt auch eine Unit-Test Möglichkeit, an die ich mich allerdins noch nicht getraut habe, da ich den Aufwand scheue, alle Klassen durchzugehen und die entsprechenden Unittests dafür zu schreiben.
Pingback: rpsblog.com » A week of symfony #63 (10->16 march 2008)