Kategorien
Symfony Yii Framework

Yii2 versus Symfony 4 – ein Framework Vergleich

Ich habe lange mit Yii und dem Symfony Framework gearbeitet und will versuchen im Folgenden die Unterschiede von beiden Frameworks aus Programmierer Sicht zu erläutern.

Konfiguration von Umgebungen

Beim Erstellen von Web-Anwendungen hat man typischer Weise mindestens 2 Umgebungen: Die Entwicklungsumgebung, auf der man Fehler sehen will und die Live Umgebung, wo dies nicht passieren soll. Dazu kommen Test-Umgebung zum Ausführen automatisierter Tests und vielleicht eine Staging Umgebung.

Symfony löst das sehr geschickt, mit .env Dateien und eigenen Ordnern innerhalb des Konfigurations-Ordners.

Bei Yii muss der Programmierer selber hand anlegen, um die richtige Konfiguration zu laden, es sind von Hause aus nur 3 (dev, prod, test) Umgebungen vorgsehen, danach wird es unübersichtlich.

Konsolen Commands

Konsolen Commands und normale Controller unterscheiden sich in Symfony komplett in Sachen Syntax, jedoch bieten beide dieselbe Funktionalität an.

Hier hat Yii den Vorteil, sich sehr änhlich zu verhalten und denselben Syntax für Controller zu verwenden.

 Datenbank Interaktion

Yii 2 setzt auf einen eigenen Datenbank Wrapper, mit dem Datenbankoperationen und Migrationen getätigt werden. Datenbanken müssen über Migrationen erstellt werden und daraus können dann die Entitäten Objekte generiert werden. Yii setzt auf das ActiveRecord Pattern, was aus Performancesicht leider nicht optimal ist im Verglech zum Repository Pattern von Symfony, da jedes Entitäten Objekt unnötigen Funktionalität mit sich herum schleppt. Auf der anderen Seite ist alles sehr zentral abgelegt in einer Datei, seien es nun Labels oder Fehlermeldungen für Formulare, Validatoren für einzelne Attribute oder Queries auf die Tabelle. Komfortabel ist die Möglichkeit pro Entität einen andere Datenbank-Verbindung zu benutzen. Die Daten können mit Hilfe der Gridview sehr einfach angezeigt werden.

Symfony setzt auf Doctrine als ORM Mapper und hat damit den Vorteil, dass Tabellen automatisch erzeugt werden anhand der Entitäten Definitionen und man einen weitaus größeren Funktionsumfang verwenden kann sowie mehr Auto-Completition in der IDE erhält aufgrund des objektorientierten Stils von Doctrine. Zum Anzeigen der Daten in einer Listview gibt es keine direkte Komponente, hier kann man beim Erstellen von Administrationsoberflächen auf das Sonata Projekt zurück greifen, mit dem erstklassige Backends erstellt werden können.

Code Generatoren

Yii besitzt einen sehr guten Code Generator namens Gii, mit dem neben den Standard Funktionen wie Model und Extensions Skeletons auch CRUD Oberflächen und Formulare sehr schön und schnell generiert werden können auf der Konsole und zusätzlich auch mit einem Web Frontend.

Symfony hat seit neustem das Symfony Maker Bundle, welches sich sehr schön anpassen lässt, aber nicht an die Funktionalität von Gii heran reicht.

Views

Yii besitzt von Hause keine Templating Engine, alles ist erlaubt und wird auch gemacht in der View, sie ist voller PHP, eigentlich ein Anti Pattern.

Symfony hat eine eigene, sehr schöne Templating Engine: Twig, mit der man sehr schön View und Applikations-Logik/Code trennen kann.

REST

Yii bringt eine ausgewöhlich einfache und umfangreiche REST Implemnetierung mit sich, mit der man sehr einfach REST Schnittstellen erstellen kann inklusive HATEOAS.

Symfony hat seine eigene FOSRest Extension, die aber nicht so elegant wie die von Yii ist. HATEOAS ist nicht verfügbar.

Debugging

Beide Frameworks habe eigene Debugging Toolbars und Profiling Möglichkeiten an Board.

Testing

Yii besitzt sehr viel statische Methode Aufrufe, die erstmal schwierig zu testen sind.

Symfony benutzt Dependency Injection für alle Services und lässt sich ausgezeichnet testen.

Long Term Support

Yii legt sich beim Support nicht fest, wohin gegen Symfony Long Term Support Versionen anbietet, die garantiert 4 Jahre supportet werden.

Caching

Yii bietet von Hause alles Caching Features, die man sich wünschen kann:

  • verschiedene Cache Provider: File, Redis, Datenbank, Memcache, Windcache etc.
  • Datenbank Query Cache
  • View Fragment Cache
  • HTTP Cache

alle sehr einach zu verwenden, ein klarer Pluspunkt für Yii.

Symfony kann dies genauso, nur mit etwas mehr Installationsaufwand, weil es nicht von Hause dabei ist. Symfony unterstützt aber zum Esi (Edge Side Includes).

Architektur

Yii ist sehr einfach aufgebaut, sehr viel arrays mit beannten Keys, die man kennen muss und die einem das Leben schwer machen.

Symfony hat Dependency Injection, was beim Testen und Arbeiten sehr komfortabel ist und sehr verständlichen, gut lesbaren und testbaren Code produziert.

Fazit:

Symfony ist eine professionelle Basis für große und zu testende Projekte. Yii ist sehr gut geeignet für schnell zu erstellende Prototypen und kleinere Projekte.