Ein erster Eindruck von Zend Framework 2

Vor ein paar Tagen ist Zend Framework 2 in einer stabilen Version freigegeben worden. Somit steht das Ergebnis einer langen Entwicklungszeit endlich zur Verfügung. Grund genug für einen ersten Blick auf das neue Framework.

Ich habe die Entwicklung nur sporadisch verfolgt und keine der zahlreichen Vorab-Versionen ausprobiert. Ohne Vorwissen habe ich mich so an den neuen Quickstart-Guide und das neue Handbuch gesetzt um mir einen ersten Überblick zu verschaffen. Meine ersten Eindrücke möchte ich hier teilen.

Das Zend Framework Universum

Das neue Framework ist in einem vollkommen neuen Universum zu Hause. Schon beim ersten Betrachten der neuen Webseite fällt zum Beispiel der „Fork us on GitHub” Button auf. Beim Lesen fallen Stichworte der modernen PHP-Entwicklung, wie zum Beispiel Composer, Travis, Pyrus und GitHub. Die Entwicklung ist hier offener geworden, es ist kein CLA mehr nötig um Code und Dokumentation beizusteuern.

Insgesamt macht ZF2 einen modernen Eindruck. Die Mindestvoraussetzung ist PHP 5.3 und es wird viel auf HTML5 gesetzt. Einzelne Packages und die Möglichkeit fertige Module einzusetzen gehören für ein modernes Framework zur Standardausrüstung.

Die neue Version kommt in einem im Vergleich zu ZF1 deutlich reduziertem Funktionsumfang daher. Einige Komponenten wurden weggelassen und werden entweder in Zukunft in neuem Gewand wieder auftauchen oder als optionale Pakete bzw. Module separat erhältlich sein.

Das Quickstart Tutorial

Im Quickstart Tutorial wird wie bisher eine kleine, aber vollständige Anwendung schrittweise entwickelt. Schön finde ich hier, dass von Anfang an die Internationalisierung der Anwendung mit behandelt wird.

Zend Framework 2 Skeleton

Der Startpunkt für eine neue Zend Framwork 2 Anwendung ist das Skeleton. Dieses kann von GitHub heruntergeladen werden und bildet das Grundgerüst. Es gibt (momentan) kein Zend_Tool, mit dem man sich ein Grundgerüst lokal erstellen kann.

Das Skeleton setzt auf Composer um seine Abhängigkeiten (Zend Framework selbst) und mögliche Zusatzmodule automatisch nachladen und aktuell halten zu können.

Auf den ersten Blick wirkt die Minimalanwendung komplizierter als im alten Framework. Auf jeden Fall aber ist sie aber ein wenig anders.

Das Skeleton ist eine lauffähige Anwendung, die direkt im Webserver lauffähig ist. Für eine hübsche Ausgabe ist sogar das CSS-Framework Bootstrap von Twitter integriert. Als besonderes Schmankerl kommt das Skeleton gleich internationalisiert daher, alle Texte der Anwendung sind in Gettext-Sprachdateien enthalten.

Module

Module gab es auch schon in der ersten Version von Zend Framework. Jetzt sind sie aber ein integraler Bestandteil und ohne Module geht überhaupt nichts mehr. Jede Anwendung besteht aus einem Anwendungs-Modul mit grundlegenden Controllern (z.B. für die Homepage und Fehlerbehandlung) und vor allem der Anwendungskonfiguration. Weitere Funktionalität wird durch das Hinzufügen von Modulen bereitgestellt. Diese Module können entweder selbst entwickelt werden oder es können fertige Module eingesezt werden.

Geplant ist eine Infrastruktur für fertige Module. In Zukunft soll man als Zend Framework Entwickler Zugriff auf Module für den unterschiedlichsten Einsatzbereich haben. Eine Grundlage hierfür ist auf http://modules.zendframework.com geschaffen.

Jedes verwendete Modul muss in der Konfiguration im Anwendungsmodul registiert werden.

Für ein Modul ist prinzipiell erst mal nur eine Klasse mit dem Namen „Module” im Namespace des Moduls nötig. Allerdings gibt es auch für Module ein Skeleton mit Best-Practices zur Modulentwicklung. Hier gibt es viele Unterschiede zu Modulen in Zend Framework 1.

In jedem Modul müssen die Controller, View und vor allem auch die einzelnen Routen explizit in der Konfiguration angegeben werden. Es fehlt eine Standard-Route, die ohne Einstellungen jede Action von beliebigen Controllern in den Modulen erreichbar macht.

Action-Controller

Auf den ersten Blick hat sich für Controller nicht viel geändert. Für einzelne Actions gelten die gleichen Konventionen wie bisher.

Da allerdings kein definiertes Verzeichnis mehr für Controller existiert und sie zusammen mit anderem Code im „src”-Verzeichnis des Moduls liegen, muss jeder Controller in der Konfiguration des entsprechenden Moduls eingetragen werden.

View und View-Skripte

View-Skripte sehen eigentlich aus wie immer. Sie liegen auch an gleicher Stelle, nur muss man das Verzeichnis nun in der Modulkonfiguration explizit angeben. Neu ist auch, dass im View-Skript auf die View-Variablen nicht mehr mit $this->variable sondern direkt mit $variable zugegriffen werden kann. Dies ermöglicht eine etwas kürzere Schreibweise.

Neues gibt es beim Zusammenspiel von Controller und View. Es werden nun nicht mehr Variablen per assign oder direkter Zusweisung an die View übergeben. In Zend Framework 2 gibt man aus einer Action ein sogenanntes View-Model oder ein Array zurück, das dann an die View-Instanz übergeben wird.

Model

An der Model-Front gibt es nichts neues. Wie bisher gibt es keine fertigen Model-Klassen oder gar ein ORM. Den Zugriff auf seine Daten muss man sich als Entwickler selbst schreiben. Hierfür steht weiterhin Zend_Db zur Verfügung, das allerdings an vielen Stellen überarbeitet wurde.

Durch das Modulkonzept lässt sich allerdings zum Beispiel Doctrine 2 als fertiges Modul einfach in die eigene Anwendung einbinden.

Neue Komponenten

ServiceManager, ServiceLocator, EventManager, DI… Alles neue Komponenten im Zusammenspiel mit der neuen MVC-Implementierung, die ich mir im Detail noch ansehen muss. Es gibt viel neues zu entdecken!

Formulare

Das Monster Zend_Form wurde überarbeitet und die Funktionalität aufgeteilt. Vor allem entfallen die schwer verständlichen Dekoratoren, Formulare werden jetzt im View-Skript mit Hilfe von View-Helpern direkt ausgegeben. Das sieht zwar erstmal nach mehr Schreibarbeit im View-Skript aus, man spart allerdings an der oft aufwändigen Definition von Dekoratoren.

Auch die Validierung und Filterung von Formulardaten wurde aus der eigentlichen Form herausgenommen und wird jetzt mit einem InputFilter realisiert. Dieser kann zum Beispiel auch direkt im Model der Anwendung definiert werden.

Neu ist auch die einfache Möglichkeit um eine Model-Instanz an ein Formular zu „binden”, was dann einen einfachen Datenaustausch zwischen Model und Formular ermöglicht.

Kommandozeile

Zwischen den ganzen Neuerungen ist mir noch eine Sache speziell ins Auge gestochen, und das ist die neue Unterstützung für CLI. Es ist mit speziellen Routen einfach möglich, Controller und Actions direkt über ein Konsolentool verwenden zu können. CLI ist somit direkt in das neue MVC integriert. Das liest sich erst mal sehr spannend und ist bestimmt einen tieferen Blick wert.

Fazit

Einige Komponenten sind nur etwas überarbeitet, an vielen Stellen ist jedoch alles neu. Auch als erfahrener Zend Framework Entwickler muss man sich in die vielen neuen Konzepte und Komponenten erst einarbeiten, um damit effektiv ein Projekt umsetzen zu können.

Für aktuell anstehende Projekte nehme ich vorerst noch ZF1, da kann ich auf die bewährte Erfahrung setzen. Mit kleinen Spiel-Projekten kann ich mir nebenbei das nötige Wissen für zukünftige ZF2 Anwendungen aneignen. Ich freu mich auf jeden Fall schon drauf!

Für bestehende Anwendungen bleibt die Frage nach einer Umstellung auf die neue Version. Zend verspricht momentan noch eine Unterstützung von 24 Monaten für Bugfixes des alten Frameworks. Es bleibt abzuwarten, wie ein mögliches Kompatibilitäts-Layer und der versprochene Migrations-Guide aussehen werden.

Für neue Blogupdates anmelden:


6 Gedanken zu “Ein erster Eindruck von Zend Framework 2

  1. Ich hab mir das nun auch mal angeschaut und muss leider feststellen dass ZF2 fast wieder ein Neueinstieg in ein Framework darstellt. Als Quasi ZF1-Veteran fällt mir der Umstieg auf ZF2 nicht so leicht. Da habe ich mir mehr erhofft. Da hilft nur der Sprung ins kalte Wasser und versuchen das Ding zum laufen zu bringen.

  2. Pingback: Einstieg in Zend Framework 2Nikos Web | Nikos Web

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *