Ruby on Rails ist in aller Munde, Rapid Development oder Agile Softwareentwicklung tolle Buzzwords. Im Grunde ist das Ziel überall das Gleiche: Funktionen schneller fertigstellen und redundante Aufgaben nach Möglichkeit vermeiden. Die Lösung vieler Probleme versprechen Frameworks.
Mal ehrlich: Welcher Webdeveloper hat nicht schon 100 Mal eine Validierung für Email Adressen eingebaut. Wer ist es nicht leid, immer wieder den gleichen SQL Code zu schreiben, obwohl er eigentlich viel lieber coole neue Features entwickeln würde, vor allem wenn alle Welt nach tollen “Web 2.0″- Applikationen schreit, die am besten gestern fertig sein sollen.
Seit ca. einem Jahr beschäftige ich mich daher mit MVC Frameworks für PHP. Bisher habe ich dafür Cake PHP genutzt. Im Zuge eines aktuellen Projektes, an dem ich beteiligt bin, habe ich mir nun aber auch noch das PHP Framework Symfony angeguckt und bin auch damit sehr zufrieden. Die ersten Ergebnisse des Vergleichs stelle ich nun hier kurz vor.
Cake PHP
CakePHP ist ein unter MIT-Licenece erhätliches MVC-Framework, das Webdevlopern “rapidly develop robust web applications, without any loss to flexibility.” verspricht. Es läuft sowohl mit PHP4 als auch mit PHP5 und bringt einen eigenen OR-Mapper mit, mit dem sich einfach Ruby-like Associations (hasOne, hasMany, hasAndBelongsToMany) modellieren lassen.
Was ich an CakePHP mag:
- Sehr gut verständliche Umsetzung des MVC-Patterns
- Convention over Configuration, d.h. wenig Konfigurationsfiles, das meiste wird über Namenskonventionen erledigt.
- große deutsche Community
- Schneller Einstieg. Die ersten Schritte mit cake sind ein “wow – ist das einfach”
Was ich an CakePhp nicht mag:
- schlechte Dokumentation, auch wenn sie langsam besser wird
- relativ imperformante Model-Schicht (so holt der OR-Mapper z.B. standardmäßig alle verknüpften Objekte mit)
Links zu Cake PHP
- Bakery: Plugins, Helpers, Snippets
- Google Group
- Meine CakePHP Links bei del.icio.us
Symfony
Symfony ist aus einem Projekt der französischen Webagentur Sensio hervorgegangen, die dieses PHP5-Framework für eigene Projekte entwickelt und seit einiger Zeit als Open Source Projekt unter der MIT-License anbietet und seit kurzen in der Version 1.05 vorliegt. Symfony baut ursprünglich auf Mojavi auf und nutzt standardmäßig den OR-Mapper Propel, der allerdings damnächst durch das perfomantere Doctrine, das es auch schon als entsprechendes Plugin gibt, ersetzt werden soll.
Was ich an Symfony mag:
- Sehr gute und ausführliche Dokumentation
- Admin Generator zur Erstellung von Backends (das funktioniert wirklich!)
- Einfaches flexibles Routing Konzept
- solide technische Basis, fast alles lässt sich extenden oder überschreiben, wenn man möchte.
- Durch den Verzicht zur Abwärtskompatibilität zu PHP4 deutlich solideres Objektmodell
Was ich an Symfony nicht mag:
- Ein Wust an unterschiedlichen YML-Konfigurationsdateien
- Ständig muss man den Cache löschen und Dinge auf der Shell erledigen, hat man das Prinzip einmal verstanden, können einem gerade diese “Pake”-Tasks eine MengeArbeit abnhemen (z.B. gibt es einen Einzeiler zum Deployment auf einen Liveserver)
- Relativ hoher initialer Lernaufwand (wenn man vorher mit Cake gearbeitet hat, fragt man sich wieso einiges so “kompliziert” sein muss), der aber durch ein großartiges Tutorial kompensiert wird.
- Verstreute Community – das macht cake mit der Bakery und der Fokussierung auf eine Google Gruppe besser
Links zu Symfony
- Symfony Forge – Plugin Site
- Symfony Forum
- Offizielles Symfony Blog
- Google Group
- Meine Symfony Links bei del.icio.us
Fazit:
CakePHP lernt sich schneller, Symfony kann etwas mehr ist aber dafür auch deutlich komplizierter. Wer eine Standard Hosting Umgebung nutzt, wird mit Symfony nicht wirklich glücklich, da viele Hoster keinen Shell-Zugrif bieten, Pear nicht installiert haben oder zum Teil noch mit PHP 4 arbeiten. Ohne Shell und pear funktioniert das Ganze zwar auch, ist aber deutlich umständlicher. Mit beiden Frameworks wird man als Developer glüklich und spart sich eine Menge Arbeit, wenn man die Einarbeitungszeit überwunden hat. Wer bisher seine PHP Applikationen noch “von Hand” erstellt, sollte sich die Mühe machen und sich zumindest eins der beiden Frameworks mal ansehen – es lohnt sich wirklich.
Auch wenn einige Performance-Vergleiche (siehe Links am Ende des Beitrags) befürchten lassen, dass dabei die Performance zu kurz kommt, muss man diese Benchmarks doch in Frage stellen, denn welche Applikation besteht schon aus “Hello World”, wie auch Francois Zaninotto treffend festellt. Interessant wird es doch eigentlich erst, wenn eine Datenbank und komplexe Seitenstrukturen ins Spiel kommen. Da immerhin Yahoo Bookmarks, Family One, das kürzlich gestartete Essen und Trinken und viele weitere große und kleine Sites auf Symfony und aufsetzen, und auch mit cake größere Sites (z.B. mingle2) betrieben werden (konnte auf die Schnelle keine besseren Beispiele fidnen, wer welche kennt, schickt sie mir bitte), kann das Performance Problem imho nicht so dramatisch sein.
18 Antworten
Kommentare zu diesem Beitrag als RSS 2.0 feed.
Am July 2nd, 2007 schrieb Daniel Hofstetter
Eine der traffic-stärksten Sites, die mit CakePHP realisiert wurden, dürfte http://addons.mozilla.org sein. Weitere Sites kannst du unter http://groups.google.com/group/cake-php/web/cake-apps-sites-in-the-wild finden.
Am July 6th, 2007 schrieb Johannes Schmidt
Was zu den Vorteilen von Symfony noch hinzuzufügen wäre, ist die simple Integration von Komponenten des Zend Frameworks, die einfach in den lib-Ordner des entspr. Projektes kopiert werden und so global zur Verfügung stehen (alternativ komplizierter mit der Zend Framework Bridge). Ob das bei Cake möglich ist, weiß ich nicht.
Am July 6th, 2007 schrieb Lars Pohlmann
Ich setze gerade mein erstes Projekt mit symfony um. Nach annfänglichen Schwierigkeiten bin ich echt begeistert.
Ein Knüller ist es, wenn man sein DB-Design mit
mit dem DbDesigner
erstellt und das konvertierte XML dann direkt als Grundlage für die Erstellung der ORM-Basisklassen benutzt.
Am July 7th, 2007 schrieb Johannes Schmidt
Hallo Lars,
btw, ist es dir gelungen, DbDesigner mit MySQL zu verbinden, das nicht auf localhost liegt?
Am July 9th, 2007 schrieb Lars Pohlmann
Ja. Kein Problem. Gibt eher Probleme damit, dass der DBDesigner nicht mysql5 tauglich ist.
Also lieber SQL-Table-Creates exportieren, leicht anpassen und dann das SQL einspielen.
Am July 9th, 2007 schrieb Lars Pohlmann
Wenn du dbdesigner unter linux benutzt, muss die mysql-client-library angepasst werden. einfach mal googeln.
Am July 9th, 2007 schrieb Johannes Schmidt
Vielen Dank für den Tipp!
Am July 10th, 2007 schrieb Helge Wenck
Eine gute Anleitung um den DB-Designer unter Ubuntu zu überreden mit der Datenbank zu verbinden gibt es im Ubuntuforum (Siehe Kommentar #10) http://ubuntuforums.org/showthread.php?t=125911#postcount2821196
Am July 10th, 2007 schrieb Lars Pohlmann
Noch als kleine Zugabe:
Es gibt ja auch die Möglichkeit die ORM-Klassen direkt aus der Datenbank erstellen zu lassen. Warum ich den Weg über den DBDesigner vorziehe?
So werden auch die Foreign-Key-Relations beachtet und entsprechend abgebildet, welche ja bei MyISAM-Tabellen verloren gehen…
Am July 16th, 2007 schrieb me
eine zeit lang hab ich mit horde experimentiert, aber symfony ist ja der ober hammer. es ist schon richtig das der einstieg etwas schwieriger ist, aber wenn die grundlegenden befehle klar sind läuft es wie geschmiert.
Am October 2nd, 2007 schrieb Symfony - Beginn einer Liebesgeschichte | ausgebloggt.de
[...] dafür habe ich, mit gerade mal 2 Tagen, bei weitem nicht intensiv genug getestet. Einen interessanten Erfahrungsbericht und Vergleich zwischen cakePHP und Symfony findet man hier und einmal Goolge angeworfen, hagelt es nur so [...]
Am October 3rd, 2007 schrieb TheNave
Mal unter uns…
Jemand der nicht weiss wie er sich n Apache (und sei es nur lokal) inklusive Shell organisieren kann, sollte lieber nicht mit Symfony arbeiten. Und der Vergleich mit den Lernkurven finde ich immer irrelevant, da man bei CakePHP mit der miesen Doku ne Lernkurve hat die so flach ist wie die Brust von Kate Moss
Symfony ist einfach vollkommener (mehr Plugins, mehr Doku, mehr Transparenz)
Das soll jetzt keine Hasstirade sein gegenüber CakePHP aber ich hab mich erst ne Weile mit CakePHP rumgeärgert bevor ich dann symfony probiert hab. Und genommen hatte ich CakePHP auch nur wegen des vorausseilenden Rufes
Am November 30th, 2007 schrieb Micha
Eine gute Doku ist mir schon verdammt wichtig. CakePHP kommt deshalb für mich nicht in Frage. Bin mir gerade seit ein paar Stunden Symfony am ansehen.
Mit dem dbDesigner habe ich bisher schlechte Erfahrungen gemacht, weil er einfach zu unstabil läuft. Kommerzielle Alternativen zur Visualisierung von Datenbanken finde ich recht teuer für das, was sie bieten.
Am December 5th, 2007 schrieb Martin H
Mit dem Eclipse-Plugin Symfoclipse gibt es nun übrigens ein Tool, um YML-Dateien und Symfony-Projekte in Eclipse zu erstellen.
Am December 10th, 2007 schrieb t8d blog » Blog Archiv » Symfoclipse - Eclipse Plugin für Symfony Projekte
[...] einen Kommentar von Martin H. zu unserm PHP Framework Vergleich bin ich auf Symfoclipse gestoßen. Das Eclipse Plugin bietet einige nützliche Features fürs [...]
Am June 19th, 2009 schrieb Michel
Ich wurde gezwungen, CakePHP für zwei Projekte zu nutzen. Alles was ich dazu sagen kann ist; CakePHP ist lächerlich. Klar nimmt es einen Arbeit ab, natürlich sind einige Dinge sehr nützlich, doch im Allgemeinen gilt: Dahinter sitzt ein Haufen euphorischer “komm wir machen was mega-tolles”-Entwickler, die irgendwas zusammenbasteln das zwar funktioniert, jedoch nur bedingt brauchbar ist. Dazu kommt: Die Umsetzung ist schlichtwegs grauenhaft! Sie preisen irgendwas von wegen “objektorientiert” an, unterstützen aber noch PHP4 und benutzen Arrays für die Konfiguration ihrer “Objekte”.
Es gäb noch so viel zu sagen, doch ich reg mich nur unnötigerweise auf. Ich rate jedem Softwareentwickler der etwas von sich hält DRINGEND von CakePHP ab.
Am January 13th, 2011 schrieb Casino Online
I hope you would not mind if I put up a part of t8d blog » Blog Archiv » PHP Framework Vergleich: CakePHP vs. Symfony on my univeristy blog?
Am April 5th, 2011 schrieb christian
also mittlerweile ist die dokumentation für cakephp schon sehr sehr gut meiner meinung nach. ich bin schon jahre lang dabei und weiß dass es in letzter zeit immer besser wird. die performance wurde auch erheblich gesteigert und im model kann man mit $this->recursive = -1 alle anderen beziehungen entfernen bevor man find(“all”) absetzt!
Kommentar abgeben