Wie beschreiben wurde die Unterstützung für TYPO3 v9 entfernt, da diese Version nicht mehr offiziell unterstützt wird. Gleichzeitig konnten wir dadurch einige weitreichende Änderungen vornehmen, wie die Umwandlung von Signal-Slots in Ereignisse, die Verwendung von Dependency Injection und die Deklaration zentraler Komponenten als Dienste.
Events
TYPO3 v10 integriert eine weitere Komponente des Symfony Frameworks, die Event-Komponente. Dies ermöglichte es uns, die klobige Implementierung der Signal-Slots in extbase durch das schnelle und schlanke DI-Container-basierte Event-System zu ersetzen.
Für unsere Benutzer, die auf Signale angewiesen sind, um ihre zusätzliche Veröffentlichungslogik zu implementieren, haben wir eine Abwärtskompatibilitätsschicht für Signale hinzugefügt (nur für Signale und nur für in2publish_core v10). Sie können die alten Signale weiterhin verwenden, müssen aber auf Event-Listener umsteigen, bevor Sie TYPO3 und in2publish_core auf die später erscheinende v11 aktualisieren.
Hier finden Sie eine umfassende Liste aller Signale und der Events, die die Signale ersetzen.
Events machen es nicht nur einfacher, Ihren Code dazu zu bringen, mit dem Content Publisher zu interagieren, sie sind auch viel schneller.
Services
Ein weiteres Feature, das mit TYPO3 v10 eingeführt wurde, ist der Dependency Injection Container, eine weitere Komponente des Symfony Frameworks.
Wir verwenden die Service-Definition, um Faktoren für verschiedene Dienste zu definieren, wie z.B. die lokale und fremde Datenbankverbindung, die nun injizierbar sind. Man braucht also die DatabaseUtility nicht mehr zu verwenden. Bitte beachten: Ein Fehler wird verursacht, wenn eine Verbindung injiziert wird, die nicht verfügbar ist. (Dies bedeutet, dass keine Verbindungen in Klassen injiziert werden dürfen, die immer geladen werden, da dies das Backend in einen unbrauchbaren Zustand versetzt).
Eine andere Möglichkeit ist die dynamische Registrierung von Diensten in der Datei Services.php, die einige Bedingungen aus der Datei ext_tables.php entfernt, wodurch der TYPO3-Bootmechanismus etwas effizienter wird.
Automated testing
Tests sind nur dann sinnvoll, wenn sie tatsächlich ausgeführt werden. Deshalb haben wir unsere Tests so umstrukturiert, dass sie in GitHub-Aktionen ausgeführt werden. Sie werden bei jedem Push in das Repository und täglich auf einer geplanten Basis ausgeführt. Letzteres soll die Kompatibilität mit Bibliotheken von Drittanbietern sicherstellen, die unabhängig voneinander aktualisiert werden.
Der Testlauf für diese Version ist hier zu finden.
weitere Neuerungen
- Die veraltete Methode modifyConfiguration wurde aus AbstractTask entfernt. Der Task sollte mit der korrekten Konfiguration konstruiert werden.
- Kommunikationsadapter müssen den Konstruktor nicht mehr implementieren, können aber den Konstruktor für Dependency Injection verwenden. Alle Adapter werden automatisch öffentlich gemacht, so dass keine zusätzliche Konfiguration in der Dienstekonfiguration erforderlich ist.
- Wir benötigen mindestens doctrine/dbal 2.11.0. Dies entspricht der Mindestanforderung von TYPO3, die bei 2.10 liegt. Doctrine DBAL hat die Art und Weise geändert, wie Abfrageergebnisse abgerufen werden, und wir haben die neue API als unseren Standard übernommen.
- Typ-Hinweise überall. Alle Parameter, die einen Typ-Hinweis haben können, haben einen erhalten, ebenso wie die Typ-Hinweise der Methodenrückgabe. Bestehender Code kann gegebenenfalls beeinträchtigt werden aufgrund von Verletzungen des Liskov-Substitutionsprinzips, das PHP streng befolgt. Die Aktualisierung des Codes sollte schnell und einfach möglich sein (IDE nutzen)