Symfony erlaubt das Dekorieren von Services: hierbei wird im Gegensatz zum Überschreiben bestehender Services eine Ummantelung derselben vorgenommen. Immer dann, wenn der ursprüngliche Service injiziert werden soll, wird statt dessen der ihn dekorierende Ersatz verwendet. Dies ist immer dann praktisch, wenn man zusätzliche Funktionalität hinzufügen möchte, jedoch keinen Zugriff auf den originalen Service hat - zum Beispiel aus Gründen der Entkopplung oder schlicht und ergreifend weil das zu erweiternde Bundle von Dritten entwickelt wird. In Zikula wird beispielsweise Twig mit einem Dekorator erweitert, um mit Hilfe zusätzlicher Events vor und/oder nach dem Rendern eines Templates reagieren zu können.
Spannende Neuerungen im Zikula Core
In Zikula 3 werden endlich weitere hilfreiche Funktionen von Symfony verwendet. Zikula 2.x hat bereits auf Symfony 3.4.x aufgesetzt, aber aus Rücksicht auf die Abwärtskompatibilität noch nicht alle Potenziale ausgereizt. Die aktuelle Arbeitsversion von 3.0.0 basiert indes auf Symfony 4.2.4 und setzt noch stärker auf die mit Symfony einhergehenden Möglichkeiten.
Besonders angetan bin ich von den Modernisierungen bei der Dependency Injection: mit dem sogenannten Autowiring werden Services automatisch injiziert, es ist keine manuelle Definition (via YAML oder XML) mehr notwendig. Symfony erkennt automatisch anhand der Typehints in Konstruktor oder anderen Methoden, welche Services injiziert werden müssen. Zweitens können auch Service Tags mit dem Autoconfiguring automatisch gesetzt werden: Symfony leitet hierbei aus einem Interface ab, welches Tag zu vergeben ist. Sobald also zum Beispiel ein Block oder Content Type gebaut wird, wird dieser automatisch als solcher gekennzeichnet. Wir haben dies nicht nur im Core und allen Systemmodulen eingeführt, sondern natürlich auch im ModuleStudio-Generator. Insbesondere bei Anpassungen generierter Module lassen sich unnötige Arbeitsschritte vermeiden, mußte man doch bisher immer die YAML-Definitionen ändern. Es fliegt also nicht nur unnötiger Code in die Tonne, sondern man spart auch lästige Fleißarbeit.