Blog, PHP / MySQL

Adventure-PHP-Framework erscheint in der Version 1.12

WordPress Entwickler und Webdesigner

Das freie PHP Framework Adventure-PHP-Framework erscheint in der Version 1.12. Hier sind alle Informationen aus der offiziellen
Revision-History:

Revision-History für 1.12

Das Release 1.12 (stable) beinhaltet Bibliotheken für den Einsatz in PHP 5. Getestet wurde gegen die Versionen >= 5.2.0.

Die Version dient der Vorschau und ist nicht für Produktions-Umgebungen freigegeben!
Ab Version 1.12 werden wie angekündigt nur noch Pakete für den Einsatz mit PHP 5 ausgeliefert. Sofern notwendig, können auf der Legacy Downloads Seite Pakete für PHP 4 heruntergeladen werden. Es wird jedoch empfohlen, die bestehenden PHP 4-Projekte auf PHP 5 umzustellen.

Der Artikel Migration von 1.11 auf 1.12 fasst die notwendigen Änderungen an den bestehenden Applikationen zusammen, da die Version nicht nur neue Features, sondern auch einige Änderungen der API beinhaltet.

Anzeige:




Die folgenden Kapitel zeigen die wichtige Änderungen in der Version 1.12 (RC1) auf.
1. Bugfixes

* Front-Controller: Die Input-Filter des Front-Controller wurden so überarbeitet, dass ausser der Standard-RewriteRule für das URL-Rewriting weitere RewriteRules definiert werden können (z.B. Umleitung per Shortcut auf bestimmte Unter-Seiten).
* Formular-Taglibs: (Bug 270) Die Initialisierung der bekannten Taglibs wurde auf Grund eines falschen Konstruktors nicht richtig ausgeführt. Daher konnten im <form:success /> Tag keine Platzhalter gesetzt werden.
* GenericORMapper (GORM): Mit diesem Bugfix wurde der GORM so erweitert, dass keine SQL-Injections mehr möglich sind.
* Usermanagement: Beim Bearbeiten von Gruppen kam es auf Grund von Variablen-Überschneidungen zu einem object to string conversion-Fehler. Dies wurde mit dem Release behoben.
* Formular-Taglibs: Der PhoneAndFaxValidator wurde korrigiert, so dass die Validierung von Telefon- und Fax-Nummern präzieser funktioniert.
* Formular-Taglibs: Auf Grund der Einführung der Client-Validatoren (Extension von Ralf Schubert) wurden die Formular-Taglibs um ein Attribut-Whitelisting ergänzt. Dies bewirkt, dass nur noch XHTML-konforme Attribute in den Quelltext geschrieben werden. Dies muss insbesondere bei der Erweiterung von Formular-Taglibs oder der Erstellung eigener Formular-Tags beachtet werden. Die Dokumentation wurde hierzu im Kapitel Verwendung von Formularen (ab Version 1.11) um einen entsprechenden Hinweis ergänzt.
* GenericORMapper (GORM): (Bug 299) Die Re-Initialisierung des GORM wurde bei der Verwendung von mehreren Datenbanken und bei der Verwendung im SESSIONSINGLETON-Modus nicht korrekt durchgeführt. Die geänderte Verwendung der GenericORMapperFactory ist in der Dokumentation und im Artikel Migration von 1.11 auf 1.12 beschrieben. Details zur Diskussion kann dem Foren-Thread GORM -> Mehrere Datenbanken entnommen werden.

2. Bereinigungen

* SessionManager: Die API des SessionManager wurde dahingehend geändert, dass die Rückgabewerte der Semantik des RequestHandler entsprechen. Für Werte, die nicht in der Session enthalten sind oder noch nicht initialisiert wurden, liefert der SessionManager nun null.
* Page-Controller + Formular-Taglibs: Um das Fehler-Handling innerhalb einer Applikation zu erleichtern wurden die im Code bisher aus Kompatibilitäts-Gründen genutzten trigger_error()-Aufrufe durch Exceptions ersetzt. Für den Page-Controller wurde u.a. eine IncludeException und eine ParserException eingeführt, im Bereich der Formular-Taglibs die FormException.
* API-Refactoring: In diesem Release stand das Refactoring der APF-API auf der Roadmap. Im Wesentlichen wurden die generischen get()- und set()-Methoden durch sprechende Pendants ersetzt. Eine ausgührliche Beschreibung zu den Ändeurngen findet sich im Artikel Migration von 1.11 auf 1.12.
* <core:setproperty />-Tag: Der <core:setproperty />-Tag wurde aus dem Release entfernt, da dieser für die aktuelle Implementierung des Page-Controller keine Bedeutung mehr hat.
* Formular-Taglibs: Mit dem Release 1.12 wurde der FolderValidator entfernt, da dieser mit Einführung der neuen Formular-Taglibs in 1.11 keine Bedeutung mehr besitzt.
* ConnectionManager: Die Klasse connectionManager wurde im Zuge der Bereinigungen in 1.12 zu ConnectionManager umbenannt. Alle Vorkommen müssen daher durch die neue Schreibweise ersetzt werden. Dies gilt auch für die Erzeugung des ConnectionManager via
PHP-Code
$cM = &$this->__getServiceObject(‚core::database‘,’ConnectionManager‘);
* ConfigurationManager: Die Klasse configurationManager wurde im Zuge der Bereinigungen in 1.12 zu ConfigurationManager umbenannt. Diese Änderung ist für den Anwender jedoch transparent, da der ConfigurationManager im Page- und Front-Controller durch entsprechende Methoden gekapselt ist.
* Einführung von Exceptions: Im Rahmen der übrigen Aufräumarbeiten im Release wurden viele Stellen von trigger_error() auf Exceptions umgestellt. Damit ist es einfacher, die auftretenden Fehler bei der Nutzung abzufangen und defiziert zu behandeln. Die vollständige Umstellung ist für das Release 1.13 auf der Roadmap.
* Verbesserung PHP 5.3-Kompatibilität: Der Code wurde um Funktionen bereinigt, die in PHP 5.3.x als veraltet gekennzeichnet oder bereits entfernt wurden.
* ConnectionManager: Der bisher zur direkten Ausgabe von gerade ausgeführten Statements genutzte Debug-Mode des ConnectionManager wurde so umgestaltet, dass er nun zusammen mit dem optionalen $logStatement-Parameter zur Ausgabe von gerade ausgeführten Statements in eine Log-Datei genutzt werden kann.
* Kontakt-Formular: Das Kontakt-Formular-Modul kontakt4 wurde im Rahmen eines im Forum unter Kontaktformular beschriebenen Fehlverhaltens einem Refactoring unterzogen. Details zur neuen Einbindung des Moduls können dem Artikel Migration von 1.11 auf 1.12 entnommen werden.

3. Erweiterungen

* Formular-Taglibs: Das neue Release enthält eine Erweiterung des File-Upload-Feld von Thalo. Mit dieser wird das Handling von Datei-Uploads deutlich vereinfacht. Die Dokumentation findest sich im Kapitel Dateiupload zusammen mit einem Verweis auf ein Tutorial im Wiki.
* Formular-Taglibs: Um die Flexibilität bei der Formatierung von Eingabe-Feldern zu verbessern wurde die Markierung von Formular-Feldern wie im Wiki-Artikel Weiterentwicklung Formular-Validierung beschrieben erweitert. Nun ist es möglich die Definition der Formatierung via CSS-Klassen vorzunehmen.
* Formular-Taglibs: Um zukünftig die Möglichkeit zu haben, mehrere, spezielle Fehlermeldung pro Feld auszugeben (Beispiel: E-Mail-Adresse), wurden spezielle Validator-Listener eingeführt, die pro Validator angesprochen werden können. Das Proposal zur Umsetzung findet sich im Wiki-Artikel Spezielle Validator-Listener, die Dokumentation geht im Kapitel Validierung auf das Thema ein.
* HTMLList-Extension: Mit dem Release 1.12 wurde die Extension htmllist von Florian Horn hinzugefügt. Sie kann dazu genutzt werden, HTML-Listen in einem Document-Controller dynamisch zu generieren. Die Dokumentation kann der mitgelieferten README-Datei oder der Wiki-Seite HTMLList entnommen werden.
* GenericORMapper (GORM): Der GORM wurde um eine Methode erweitert, die die Anzahl der in der Datenbank gespeicherten Objekte je Typ zurück gibt. In diesem Zug wurde das Fehler-Handling auf Exceptions umgestellt.
* <core:appendnode />-Tag Der <core:appendnode />-Tag wurde um das optionale Attribut includestatic erweitert. Dieses bewirkt, dass neben den DOM-Objekten nun auch statische (=textuelle) Inhalte in den gewünschten DOM-Knoten übertragen werden. Details zur Diskussion können dem Foren-Thread [core:appendnode] Erweiterung für DocumentController? entnommen werden.
* GenericORMapper (GORM): Der OR-Mapper des APF wurde um die Möglichkeit erweitert, eigene Datentypen für die Index-Spalten zu definieren (z.B. BIGINT(10) UNSIGNED). Details zur dieser Erweiterung finden sich im Forum unter Datentypen des GORM.
* ConnectionManager: Der ConnectionManager wurde um einen weiteren Treiber für den Zugriff auf MySQL-Datenbanken erweitert: dem MySQLiHandler. Dieser implementiert die Methoden der APF-Definition des Datenbank-Treibers und erweitert diese um ein generisches Handling von Bind-Parameter-Statements. Details können dem Kapitel MySQLi-Treiberschicht entnommen werden.
* GenericORMapper (GORM): Das Setup des GORM wurde so angepasst, dass die Beziehungs-Tabellen nun einen kombinierten Primär-Schlüssel über alle Spalten besitzen. Dies erhöht die Selektivität des Index und garantiert damit gleichbleibende Performance bei großen Datenmengen.
* BenchmarkTimer: Der BenchmarkTimer wurde um Messpunkte für das Parsen der DOM-Elemente erweitert. Damit ist es noch einfacher möglich, Engpässe in Applikationen zu finden.
* GenericORMapper (GORM): Das Setup- und Update-Tool des GORM wurde um die Möglichkeit erweitert, zusätzliche Indizes auf Attribut-Spalten von Objekt-Definitionen zur schnelleren Abfrage über das GenericCriterionObject definieren zu können. Die Dokumentation wurde dazu um das Kapitel Zusätzliche Indizes erweitert.
* Link-Generierung: Die beiden Tools LinkHandler und FrontcontrollerLinkHandler wurden erweitert um bei der Link-Generierung abweichende Ports für die Adressierung von Zielen angeben zu können. Bei der Eingabe von http://localhost:8080 wird der Port nun auch im Ergebnis eingeschlossen.
* Usermanagement I: Das Modul usermanagement wurde um die Möglichkeit erweitert, Sichtbarkeits-Berechtigungen beliebiger Anwendungen zu verwalten. Damit ergänzt es die bereits bisher enthaltene Funktion zur Administration der Funktions-Berechtigungen und ermöglicht es, das Modul mit beliebigen Anwendungen zu koppeln. Die Dokumentation des neuen Features findet sich unter Sichtbarkeits-Berechtigungen, ein Anwendungs-Beispiel wird auf der Wiki-Seite Usermanagement beschrieben.
* Usermanagement II: Die Klasse UmgtManager wurde um zahlreiche Methoden zur einfacheren Verwaltung des Datenpools erweitert. Details zu den jeweiligen Methoden finden sich in der API-Dokumentation des Release 1.12.
* Formulare (Datums-Control): Die Taglib <form:date /> wurde um eine Methode erweitert, die die Initialisierung des Controls erleichtert. Mit setDate() kann das Control nun mit einem beliebigen Datum initialisiert werden.
* GenericORMapper (GORM): Aus einer Skype-Diskussion entstand die Anforderung, den GORM über den DIServiceManager als Service definiert und in eine Business-Komponente injiziert werden kann. Hierzu wurden dem Release zusätzliche (Initialisierungs-)Services hinzugefügt, mit denen dies nun möglich ist. Details zur Verwendung sind auf der Wiki-Seite Erzeugen des GORM mit dem DIServiceManager und im Kapitel Erzeugung des GORM via DI der Dokumentation beschrieben.
* Formulare (TextLengthValidator): Der TextLengthValidator wurde um einen strict-Modus erweitert. Mit diesem werden führende und am Ende stehende Leerzeichen vor der Validierung entfernt. Dies führt insbesondere bei Texte, die ausschließlich aus Leerzeichen bestehen zu negativen Validierungs-Ergebnissen.
* Formulare (Client-Validatoren): Ralf Schubert spendierte dem Release 1.12 neue Extension, mit der die Server-seitige Formular-Validierung um Client-(Java-Script-)Validatoren erweitert werden können. Die Integration der auf jQuery basierenden Java-Script-Bibliothek lässt sich mit den gewohnten Mitteln einsetzen und bringt ihrerseits Tags mit, die direkt in bestehende Formulare ohne eine Zeile Java-Script-Code integrieren lassen.

4. BETA-Feedback

* Registry: Die Registry wurde nach einer Diskussion im Forum (siehe [Registry] Warum nicht als static?) zu einem statischen Container umgebaut um die Performance des APF nochmals zu verbessern. Details zu den notwendigen Änderungen können dem Artikel Migration von 1.11 auf 1.12 entnommen werden.
* Bug 325: Die Klasse iteratorBaseController verursachte nach einem Refactoring eine Zugriffs-Verletzung auf eine protected-Variable des Iterator-Templates.
* Benchmark: Der Benchmark-Report wurde hinsichtlich der Darstellung der Benchmark-IDs optimiert. Zudem wurden Messpunkte in tools-Komponenten entfernt, die im Page-Controller bereits abgedeckt sind.
* GenericORMapper (GORM): Die Definition von zu ladenen Attributen eines Objekts waren durch ein Refactoring nicht mehr möglich. Dies wurde im vorliegenden Release Candidate im Vergleich zur BETA behoben.
* GenericORMapper (GORM): Durch das Refactoring der Klasse GenericDomainObject gab es Fehler beim Speichern von komplexen Objekt-Bämen. Dies wurde zusammen mit der Einführung von einigen Convenience-Methoden im Rahmen der Tests des Releases behoben.
* Formulare (Whitelist-Filter): Der Attribut-Whitelist-Filter für Formular-Elemente wurde um die Event-Attribute gemäß XHTML 1.0 strict erweitert. Weiterhin wurde der Filter korrigiert, damit bei in einem Formular enthaltenen Datei-Upload-Feld das Attribut enctype automatisch gesetzt wird.
* Formulare (Filter und Validatoren): Die Initialisierung von Formular-Filtern und -Validatoren wurde um die Parameter Context und Language erweitert. Damit kann nun auch innerhalb eines Filters bzw. Validators auf Konfigurations-sensitive Inhalte zugegriffen werden. Als konkreter Anwendungsfall kann nun beispielsweise die Validierung der Eindeutigkeit einer Eingabe gegen eine Datenbank umgesetzt werden.
* Formulare (FieldCompareValidator): In diesem Bugfix wurde ein Fehler korrigiert, der dazu führte, dass der FieldCompareValidator keine spezialisierten Validator-Listener adressieren konnte.

5. RC1-Feedback

* Formulare (Whitelist-Filter): Die Attribut-Whitelist für das Formular-Tag (<html:form />) wurde um das Attribut accept-charset erweitert. Damit ist es möglich, den vom Formular akzeptierten Zeichensatz explizit anzugeben.
* ConnectionManager: Das Interface von AbstractDatabaseHandler::fetchData() wurde im Rahmen eines Bugfixes für MySQLxHandler und MySQLiHandler vereinheitlicht. Die beiden MySQL-Client-Libraries verhalten sich nicht gleich.
* CacheManager: Die Initialisierung von mehreren CacheManager-Instanzen pro Applikation scheiterte wegen der falschen Initialisierung innerhalb der Factory. Dies wurde im Rahmen eines Bugfixes behoben.

Die Dateien mit dem Namen apf-codepack-* enthalten die Bibliotheken des Framework, Dateien mit dem Namen apf-demopack-* die Bibliotheken plus einer Demo-Applikation. Für Einsteiger wird empfohlen die Demo-Packs herunter zu laden. Release-Dateien mit dem Namen apf-configpack-* beinhalten Beispiel-Konfigurationen, die die Konfigurations-Attribute der jeweiligen Tools und Anwendungen nochmals beschreiben.

Die seit dem Release 1.8-RC1 angebotenen apf-perfcodepack-*-Dateien werden mit dem aktuellen Release auslaufen.

Schlagworte zu diesem Artikel: , , , ,

Veröffentlicht von Pascal Bajorat

Pascal Bajorat ist Mediengestalter und arbeitet als Webdesigner / Webentwickler, Autor und Trainer in Berlin. In den vergangenen Jahren hat er sich vor allem auf das CMS WordPress und die Entwicklung von hochwertigen Webseiten und Sonderlösungen spezialisiert. Er hat den Webdesign-Podcast.de 2010 gegründet.

Webseite:

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Der Benachrichtigungs-Dienst wird von WordPress.com (Automattic Inc., USA ) bereitgestellt. Mit der Anmeldung akzeptierst du die Datenschutzerklärung. Die Abmeldung / Abo-Verwaltung ist jederzeit über diesen Link möglich.