Neues Jahr, neuer Code, neue Ziele: TYPO3 5.0 aktuell

Ungewöhnlich: Backslashes als Namespace-Trenner – nach kurzer Eingewöhnung jedoch kein Problem mehr.
Bier und andere Flüssigkeiten
Während der TYPO3 Transition Days nach der T3CON08 wurden die ersten Konzepte für eine neue Template-Engine entwickelt – damals noch unter dem Arbeitstitel „BEER3“. Seitdem haben Sebastian Kurfürst und Bastian Waidelich enorme Fortschritte erzielt. Die mittlerweile auf den Namen „Fluid“ getaufte Entwicklung wird die neue Standard-Template-Engine für TYPO3 werden.
Mit dem schon von FLOW3 bekannten Ansatz, die Fehler anderer zu vermeiden und nur Rosinen herauszupicken, entstand eine einfache und zugleich mächtige Syntax für das Templating. Darüber hinaus ist es möglich, eigene Helper zu programmieren, die spezielle Funktionen zur Verfügung stellen. Diese werden im Template einfach als Tag eingebunden.
Einzigartig im Vergleich mit anderen Template-Engines ist jedoch die Unterstützung für automatische Vervollständigung [1] beim Entwickeln von Templates, sofern der verwendete Editor XML-Schema unterstützt. Durch den in Fluid integrierten Generator für XSD-Dateien können so problemlos auch eigene Helper unterstützt werden.
Namespaces und andere Gründe für PHP 5.3
Mit der dritten Alpha von PHP 5.3 wurde die neue Syntax für Namespaces in PHP nach langen und teils hitzigen Diskussionen festgelegt. Statt des bisher verwendeten doppelten Doppelpunkts (::), der auch als „scope resolution operator“ verwendet wird und daher einige Probleme aufwarf [2], wird nun der Backslash (\) verwendet.
Wenige Tage nach Veröffentlichung der dritten Alpha wurden der Quelltext von FLOW3 und die entsprechenden Pakete in der Distribution auf die neue Syntax umgestellt. Die Umstellung verlief ohne große Probleme, einige Folgefehler wurden in den Tagen darauf behoben. Geholfen bei der fast reibungslosen Umstellung haben nicht nur die Unit Tests, sondern auch die Coding-Guidelines, die beispielsweise mit ihrer Forderung nach einfachen Anführungszeichen dafür sorgen, dass unerwartete Effekte durch den Backslash in Strings ausbleiben. Ein Nachteil der neuen Syntax ist jedoch nach wie vor, dass alle verwendeten Tools, vom Dokumentationsgenerator bis zur IDE, Probleme damit haben. Dies bedeutet momentan Programmieren wie in alten Zeiten, ohne API-Doku und Code-Completion. Es bleibt abzuwarten, welche IDE im Support für Namespaces das Rennen macht – Zend Studio wird es wohl nicht werden.
Neben Namespaces macht FLOW3 auch von anderen Neuerungen in PHP 5.3 regen Gebrauch. Im Zusammenhang mit der Signals-Slots-Implementierung spielen Closures [3] eine wichtige Rolle und durch den Einsatz von „SplObjectStorage“ [4] konnten einige Stellen optimiert werden, an denen Arrays zur Ablage von Objekten genutzt wurden. Begeistert hat dabei, wie prompt die PHP-Entwickler teilweise auf Vorschläge reagieren: So hat „SplObjectStorage“ jetzt eine addAll()-Methode.
Evolution und Revolution
Vom Begriff der „Components“ hat sich das 5.0-Team zugunsten von „Objects“ verabschiedet und nach der Umbenennung hat Robert Lemke diesen Teil des Frameworks grundlegend überarbeitet. Herausgekommen sind dabei klarere Zuständigkeiten im Code und komplett überarbeitete Unit-Tests, die die bisherigen eher funktionalen Tests ersetzen.
Neu hinzugekommen ist YAML als Konfigurationsformat, sämtliche Konfiguration wurde auf das neue Format umgestellt. Es ist nach wie vor möglich, PHP zur Konfiguration zu nutzen, YAML hat sich aber als sehr lesbar und mächtig bewiesen. Ebenfalls neu ist die Möglichkeit der „settings injection“, mit der die Konfiguration eines Pakets wesentlich leichter als durch einen Aufruf des Konfigurations-Managers zugänglich wird.
Die angenehmste Neuerung jedoch, durch die ein großer Teil des erfolgten Bootstrap-Refactorings erst möglich wurde, ist die „object injection“. Bisher konnte man für die „Dependency Injection“ (DI) lediglich einen Objekttyp angeben. Jetzt kann man in der Konfiguration Instanzen von Objekten konfigurieren, die dann vom Objekt-Manager für die DI genutzt werden. Damit ist es zum Beispiel möglich, Caches komplett in der Konfiguration zu definieren und im Code per DI zu nutzen.
Sollte die damit gegebene Flexibilität nicht reichen, können darüber hinaus auch eigene Factories genutzt werden. Beispiele finden sich in der Datei „Objects.yaml“ im FLOW3-Paket [5].
Eher revolutionär sind die Änderungen an der Caching-Komponente. Ein Zusammenspiel von Signal-Slot-Mechanismus, Neuerungen im AOP-Framework, einer neuen Komponente zum Überwachen von Dateien und den Möglichkeiten der Cache-Konfiguration und -Injection sorgt für eine deutliche Beschleunigung des Frameworks. Dadurch werden auch bei Änderungen an Klassen und Aspekten die betroffenen Caches automatisch gelöscht und geänderte Proxy-Klassen neu generiert. Gegenüber dem bisher nötigen manuellen Löschen aller Caches bringt dies vor allem für Entwickler einen enormen Geschwindigkeitszuwachs.
Dies und Das
Neben den großen Baustellen hat das 5.0-Team auch zahlreiche kleinere Dinge in Angriff genommen:
- TypoScript wurde weiter bereinigt und einige Prozessoren wurden implementiert.
- Die Portierung von JSR-283 wurde weiter an die Änderungen in der Spezifikation angepasst.
- Man kann sich jederzeit einen System-Logger per DI geben lassen, um Meldungen aus dem Code zu loggen.
- Viele Unit-Tests wurden umfassend überarbeitet, um sie stärker zu entkoppeln und Seiteneffekte zu minimieren.
Eine weniger generelle Lizenz für FLOW3
Als die Entwicklung von TYPO3 5.0 und FLOW3 begann, steckte die GPL v3 noch in den Kinderschuhen. Weil dem 5.0-Team die Tragweite der Änderungen nicht klar war, beschloss man, FLOW3 und die weiteren Komponenten ausschließlich unter der GLP v2 zu veröffentlichen.
Da eine spätere Änderung der Lizenz nicht ausgeschlossen werden konnte und sollte, wurde ein Contributor License Agreement eingeführt [6]. Zu Beginn des Jahres zahlte sich das aus, da FLOW3 und seine direkten Abhängigkeiten unter die Bedingungen der LGPL v3 (oder neuer) gestellt wurden. TYPO3, also das CMS selbst, steht nach wie vor unter der GPL.
Neue (alte) Ziele für 2009
In diesem Jahr kann das 5.0-Team FLOW3 endlich für das benutzen, wofür es geschaffen wurde: die Entwicklung eines CMS. Dabei wird das Team weiter an den technischen Konzepten feilen, Ideen für die Benutzeroberfläche sammeln und vor allem mit Volldampf an der Umsetzung der nötigen Funktionen arbeiten.