Im Moment schrauben wir viel an dem TYPO3 Autoloader. Diesen habe ich euch bereits einmal vorgestellt, möchte euch aber über Neuerungen berichten. Neben den bereits vorgestellten Loadern, werden in der aktuellen Version, weitere Funktionen automatisch mit geladen. Diese habe ich in einer Liste unten beschrieben.
Nochmals über diese Thematik zu bloggen, haben mich die Kollegen und Kunden gebracht. Zum einen hatte ich vergangene Woche einen MySQL „Out of Memory“ Fehler (Ja, es war MySQL und nicht PHP). Die Datenbank kämpfte in einem alten Projekt mit einem FCE, welches in ca. 80 Sprachen und Sections, versuchte über 2.000.000 Zeichen in einen bodytext zu schieben (der Netto-Informationsgehalt war extrem wenig). Es funktionierte im Anschluss, aber wenn man mal bedenkt das fast die hälfte der Zeichen Leerzeichen waren, welche das XML „schön“ aussehen lassen, dann weiß man, dass man was falsch gemacht hat. Zum anderen sind wir auf der Suche nach FCE Alternativen, weshalb wir uns schon so einige Extensions angeschaut haben, aber immer über die FlexForms gestolpert sind. Dies hat uns zum Autoloader gebracht: Mit dem Autoloader (SmartObjects und ContentObjects) ist es leicht aus Extbase Modellen einfach und sauber echte Inhaltselemente zu bauen, tt_content zu ergänzen (CType) oder aber vollständig separate Daten persistent zu machen. Komplett ohne XML! Wir wollen den Mechanismus jedoch weiter verbessern und suchen weitere Ideen!
Folgende Loader sind neu hinzugekommen:
- TypeConverter:
TypeConverter werden automatisch aus dem Verzeichnis „Classes/Property/TypeConverter/“ geladen. Zusätzlich wird die Verzeichnis-Tiefe berücksichtigt. Alle Klassen werden automatisch als Converter über die API von ExtBase registriert. - Extension ID (eID):
„eID“-Skripte werden im Verzeichnis „Resources/Private/Php/eID/“ gesucht und registriert. Dabei ist der Schlüssel für die Registrierung der Datei-Basename (Dateiname ohne Endung). Die Datei innerhalb des „eID“ Ordner sollte ausschließlich als „Bootstrap“ dienen und weitere benötigte Service Class entsprechend der TYPO3 Konventionen nachladen. - Aspekte:
Wir haben eine Basis Implementierung um vor oder hinter Funktionen zu Hooken. Zusätzlich kann eine Funktion auch ersetzt werden oder ausschließlich versucht werden eine Exception zu fangen. Intern werden die Funktionen via SYS/Objects registriert. Es ist nicht ganz so mächtig wir eine richtige Vererbung (Xclass), der Vorteil ist jedoch, dass mehrere verschiedene Klassen einen Aspect an ein und der selben Ziel-Klasse benutzen können, da eine gemeinsame Unterklasse gebildet wird. Diese Funktion ist im Moment in der Erprobung.
Wenn ihr den Autoloader ausprobieren wollt, werft am besten einmal ein Blick in die Beispiele, welche in der autoloader Extension liegen (Resources/Private/Examples).
Wir sind weiterhin offen für Feedback und Ideen. In den letzten beiden Versionen haben wir auf hohe Code-Qualität geachtet und sind im Moment dabei die Dokumentation auszubauen, sodass alle Funktionen umfangreich dokumentiert sind. Habt ihr weitere Ideen oder Fragen?