Zend Framework Cookbook | Das Blog zum Buch

Und es bewegt sich doch - das Zend Framework 2 auf dem Weg zum Release Candidate

Mit einiger Freude habe ich vor Kurzem die Mitteilung von Rob Allen auf der Mailingliste vernommen, dass die Beta 5 des Zend Framework 2 die letzte Beta-Version sein wird. Demnach sind von hier an nur noch Release Candidates geplant. Damit ist ein wichtiger Schritt auf dem Weg zur ersten stabilen Version von Zend Framework 2 getan, denn im Gegensatz zu den Beta-Versionen sind die Release Candidates (hoffentlich weitestgehend) feature complete. Es mögen dann zwar noch Bugs zu finden sein, aber es sind keine grundsätzlichen Umwürfe mehr zu erwarten.

Wer also plant, eine Anwendung auf Basis von ZF2 zu bauen (oder wer beispielsweise ein Buch zum Thema schreibt), kann langsam anfangen, sich mit den Konzepten und Features der neuen Version zu beschäftigen, ohne all zu viele böse Überraschungen erwarten zu müssen.

Wieder zurück nach Totalausfall

Nach einigen Tagen downtime, ist diese Seite endlich wieder da. Schuld war ein kapitaler Festplattencrash und ein dadurch verursachter Totalausfall des Servers.

Jetzt ist alles wieder gut und mein Dank geht an Thomas Niepraschk der es geschafft hat, dem Patienten alle wichtigen Informationen zu entlocken, so dass es nur Arbeit, aber kein schmerzhafter Datenverlust ist.

Klassen laden im ZF2 mit dem ClassMapAutoloader

Obwohl das Zend Framework 2 an der einen oder anderen Stelle noch Baustelle ist, kann man schon einige sehr sehr vielversprechende Features erkennen und die neue Strategie für das Laden von Klassen gehört definitiv dazu. Ich habe daher mal zusammengefasst, wie Sie sich am einfachsten selbst mal einen ersten Eindruck davon verschaffen können.

Wie funktioniert der Autoloader?

Der neue Autoloader basiert nicht mehr auf der automatischen Übersetzung von Prefixes in Dateipfade, sondern auf explizit generierten Classmaps.

Eine Classmap ist im Grunde genommen nichts weiter, als ein gigantisches Array, dass den vollständigen Namen (inklusive Namensraum) einer Klasse auf einen Pfad abbildet.

    return array (
        'Zend\\Acl\\Acl' => __DIR__ . DIRECTORY_SEPARATOR . 'Zend/Acl/Acl.php',

        [...]
    );

Wenn so eine Classmap (von der es beliebig viele in einer Anwendung geben kann) an einem Objekt vom Typ Zend\Loader\ClassMapAutoloader registriert wird, stehen anschließend alle darin referenzierten Klassen automatisch bereit.

    
    require_once __DIR__ . '/../library/Zend/Loader/ClassMapAutoloader.php';
    $loader = new Zend\Loader\ClassMapAutoloader();
    $loader->registerAutoloadMap(__DIR__ . '/../library/Zend/Controller/.classmap.php');
    $loader->register();
    

Das ist nicht nur einfach, sondern auch noch performant, wie Matthew Weier O'Phinney herausgefunden hat. Viel interessanter finde ich jedoch, dass es dem Entwickler wesentlich mehr Kontrolle darüber gibt, wie (s)eine Anwendung aufgebaut sein soll und es durch die Classmap-Dateien trotzdem immer transparent bleibt (ganz abgesehen davon, dass zusätzliche Komponenten einfach ihre eigene Classmap mitbringen können und nur im Loader registriert werden müssen).

Vorbereitung

Als erstes brauchen Sie natürlich den aktuellen Stand des Zend Framework 2. Der liegt derzeit ausschließlich als Git-Repository vor. Alles was Sie dafür wissen müssen, finden Sie im Zend Framework Git Guide.

Anschließend finden Sie im Verzeichnis bin/ sowohl ein Beispiel für die Nutzung von Zend\Loader\ClassMapAutoloader (von dem ich mir das obige Beispiel ausgeliehen habe), als auch ein Generator-Skript. - Schließlich ist es wenig erstrebenswert, alle Classmaps manuell anzulegen.

Eine Classmap erzeugen

Das Kommandozeilenskript classmap_generator.php erwartet im Grunde genommen zwei Parameter:

  • library: das Verzeichnis, von dem eine Classmap erzeugt werden soll
  • output: Pfad zum Verzeichnis, in dem die .classmap.php Datei abgelegt werden soll.

Mit folgendem Aufruf können Sie eine Classmap erzeugen, die alle Klassen des Zend Frameworks beinhaltet:

    $> php ./classmap_generator.php -l /path/to/library/Zend -o /path/to/library/.classmap.php

Fallstricke

Ganz so einfach ist es dann aber natürlich nicht, denn es gibt ein paar Kleinigkeiten zu beachten:

Ort der Classmap-Datei

Sie können zwar festlegen, wohin die Classmap-Datei geschrieben werden soll, aber das Generator-Skript geht grundsätzliche davon aus, dass sie im selben Verzeichnis liegt, wie die Bibliothek, die sie beschreibt.

Für alle anderen Situationen kommen Sie nicht darum herum, entweder das Generator-Skript oder die Classmap zu bearbeiten und die Konstante DIR durch einen alternativen Wert zu ersetzen

    $myCustomPath = '/some/custom/path';
    
    return array (
        'Zend\\Acl\\Acl' => $myCustomPath . DIRECTORY_SEPARATOR . 'Zend/Acl/Acl.php',

        [...]
    );

Symlinks

Das Generator-Skript löst symbolische Links leider nicht auf!

Bestehende Dateien überschreiben

Es wird sich im Zuge der Entwicklung kaum vermeiden lassen, bestehende Classmaps zu aktualisieren. Dafür können Sie dem Aufruf des Generator-Skritps den Parameter --overwrite (oder auch -w) hinzufügen.

Soweit erst mal ein erster Überblick. Wenn es etwas zu verbessern oder zu ergänzen gibt, freue ich mich über jede Form von Feedback unter @zfcookbook.

Es gibt Fortschritt zu vermelden

Champagner wäre ein wenig übertrieben, aber zumindest ein herzhaftes Schulterklopfen habe ich mir heute redlich verdient: das Kapitel zu relationalen Datenbankbetriebssystemen ist fertig und kann nun nach Köln zum Redigieren gehen.

In Wahrheit ist es dort schon längst und ich bin schon gespannt, wie das Feedback ausfällt. Das Kapitel ist deutlich ausführlicher, als es normalerweise in einem Kochbuch zu erwarten wäre, aber relationale Datenbanken sind nach wie vor Dreh- und Angelpunkt der meisten Webanwendungen und Zend\Db damit einfach eines der wichtigsten Pakete des gesamten Zend Frameworks.

Ich habe mich entschieden, den gesamten Komplex Zend\Db\Table in einen eigenen Teil auszulagern, weil ich festgestellt habe, dass zu diesem Themenbereich viel spannendes zu sagen ist und es wäre schade, das nicht zur Geltung bringen zu können. Schließlich will ich noch mein Lieblingsthema einbringen: Constraint basierte Modelvalidierung in Zend\Db\Table

Wer noch Vorschläge und Ideen für Themen hat, fühle sich auf jeden Fall herzlich eingeladen. Am besten via Twitter @zfcookbook.

Versionsnummern und Webanwendungen

Im Google Operating System Blog habe ich gerade einen interessanten Artikel über Versionsnummern in Googles Chrome-Browser gelesen. Eigentlich müsste man von den nicht existierenden Versionsnummern sprechen, denn bei Chrome-Releases sind sie offenbar komplett bedeutungslos. - Und ich finde das super!

Im Grunde genommen trägt Google damit der Erkenntnis Rechnung, dass Softwareversionen ein künstliches Konstrukt sind. Das wird klar, wenn man sich mal überlegt, wo die tollen Versionsnummern eigentlich herkommen? Sie stammen aus Zeiten, als Software auf kleinen silbernen Scheiben ausgeliefert wurde und wurden benötigt, um einen bestimmten Stand zu manifestieren, auf dessen Basis das jeweilige Goldmaster erstellt wurde. Das Goldmaster ging dann in die Presswerke, wurde vervielfältigt und ausgeliefert. Alle Fehler, die bis zu diesem Moment nicht beseitigt worden waren, konnten erst wieder im nächsten Release behoben werden.

Und heute? Der einzig wirklich relevante Distributionskanal für Software ist das Internet und dieser Kanal ist ständig verfügbar. Nach dem Release tritt ein Fehler auf? Kein Problem. Beseitigen wir ihn und liefern ein Update aus! - Noch einfacher, wenn wir es mit einer Webanwendung zu tun haben.

Nicht umsonst beschreiben 37Signals in ihrem Buch Getting Real das Prinzip folgendermaßen:

You need to build, launch, and tweak. Then rinse and repeat.

In meinen Augen geht es dabei nicht darum, dass wir uns mit Fehlern in Software abgeben müssen, sondern um die Erkenntnis, dass die Umgebung, in der Software zum Einsatz kommt, beständig im Wandel ist. Das gilt für technische, wie auch für inhaltliche Rahmenbedingungen. Und wenn die Anforderungen nicht statisch sind, kann es die Software, die diese Anforderungen abbilden soll, natürlich auch nicht sein.

Die Aktualisierungsstrategie von Google vermeidet damit auch quasi nebenbei gleich noch ein Problem, dass Webentwickler massiv umtreibt: Anwender, die veraltete Browserversionen aus was für immer gearteten Gründen nicht upgraden, denn nicht-upgraden ist bei Chrome keine Option mehr.

Zend_Tool und Zend\Tool für ZF2 parallel betreiben

Der beste Weg, um mal einen Blick auf das rasant voranschreitende Zend Framework 2 zu werfen, ist eine kleine Demo-App, die man mit Hilfe des zf Befehls auf der Kommandozeile erzeugt. Aber nur für einen ersten Blick, will man natürlich nicht das komplette Setup über den Haufen werfen...



Rob Allen beschreibt deshalb in einem Blog Post einen kompakten Weg, wie man beide zf Tools (für Zend Framework 1 und 2) bequen parallel betreiben kann.

Im Endeffekt empfiehlt er, zur Nutzung von Zend Framwork 2 ein Alias anzulegen. Damit ist es möglich, beide Tools, trotz ihres identischen Namens, getrennt voneinander aufzurufen.

Es sollte allerdings ergänzt werden, dass dieser Weg nicht für Windows Nutzer funktioniert. Hier würde mir als einzige Lösung eine Cygwin-Installation einfallen, aber ich finde das ist unter Windows immer eine gute Idee.

PHP Unconference 2010

Auch dieses Jahr findet am 25. und 26. September die PHP Unconference in Hamburg statt. - Und ich bin endlich wieder dabei.

Obwohl ich gestehen muss, dass ich mich viel zu spät um ein Ticket gekümmert habe.

Banner PHP Unconference

Ich freue mich riesig, denn mein letzter Besuch vor zwei Jahren war grosses Kino. Spannende Sessions, jede Menge nette Menschen und nicht zuletzt, meine erste eigene Session in einem solchen Kontext, die durchaus positiv angenommen wurde.

Dieses Jahr werde ich es wohl voraussichtlich nicht schaffen, eine eigene Session vorzubereiten. Mir fehlt schlicht und ergreifend die Zeit und ich möchte gerade dort ungern mit einem halbgaren Thema auflaufen.

Dafür habe ich mehr Ruhe für die Flut spannender Themen und Eindrücke. Mehr dann hier in Kürze.

Vertragsunterzeichnung erfolgreich abgeschlossen

Ein bisschen stolz war ich schon, als ich vor ein paar Tagen die Verträge zum Buch in den Händen hatte.

Verträge in zwei Ausführungen

Jetzt ist alles unter Dach und Fach und ich freue mich auf ein super spannendes Projekt! Ach ja, ist das Briefpapier nicht der Hammer?

Hallo Welt

Kein Blog auf dieser Welt sollte starten, ohne ein ordentliches Hallo Welt als erstes Post...

Dann kann es ja jetzt losgehen!