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.
Symfony CurrentUser-Attribut kollidiert mit Doctrine Param Converter
Symfony und Doctrine bieten bereits Unterstützung für unterschiedliche native Attribute, welche seit in PHP 8 verwendet werden können. So lassen sich diese unter anderem für ORM-Definitionen (#[ORM\*]), Validierungsregeln (#[Assert\*]), Routen (#[Route]) oder zur Injektion von Service Tags (#[TaggedIterator]) einsetzen.
Das Attribut #[CurrentUser] erlaubt es, das Objekt mit dem aktuell angemeldeten Nutzer direkt als Controller-Argument zu übergeben; ein Beispiel hierfür lässt sich diesem Blog-Artikel entnehmen. Intern wird hierbei ein Argument Value Resolver benutzt.
Kommende Neuerungen in Symfony 5.3
Vor zwei Tagen wurde Symfony 5.3.0-BETA4 veröffentlicht. Dies nehme ich zum Anlass, um einmal einen Überblick über die wichtigsten neuen Funktionen zu geben, auf die wir uns im Rahmen dieses Updates freuen können. Im Folgenden sind die bisher veröffentlichten Blog-Beiträge thematisch nach Komponente sortiert.
- Config
- Config Builder Klassen
- Console
- Negierbare Command-Optionen
- Verbesserte Debug-Commands
- Lazy Command Description
- DependencyInjection
- Mehrere Environments in einer Datei konfigurieren
- Service Autoconfiguration und Attribute
- Service Autowiring mit Attributen
- Form
- Tailwind CSS Form Theme
- Form Handler Helper
- Sortierung für Formularfelder
- HttpFoundation
- Session Service Deprecation
- Logging
- Logging-Verbesserungen (Messenger, Deprecations)
- Notifier
- Notifier-Integrationen
- OptionsResolver
- Prototype Optionen
- PasswordHasher
- Neue PasswordHasher Komponente
- Runtime
- Neue Runtime Komponente
- Security
- Verbesserter Schutz gegen Breach-Angriffe
- Serializer
- Inlined Serialization Context
- Twig Serialize-Filter
- Translation
- Translation Providers
- Uid
- Uid-Verbesserungen
Symfony Messenger - Behandlung erneut fehlgeschlagener Nachrichten
Im Symfony Messenger gibt die Möglichkeit, fehlgeschlagene Nachrichten an eine failed queue zu leiten. In diesem Sammelbecken können diese dann inspiziert und nach Korrektur des zu Grunde liegenden Problems erneut verarbeitet werden.
Schlagen sie dabei erneut fehl, landen sie allerdings per Standard nicht wieder in der failed queue, sondern werden verworfen. Dies hat damit zu tun, dass die Nachricht bereits einen SentToFailureTransportStamp besitzt.
Möchte man jedoch die Nachricht immer wieder auffangen, bietet es sich an, diesen Stamp einfach vorher wieder zu entfernen. Dies kann mit der folgenden Middleware getan werden.
Response-Eigenschaften im Zikula Theme-Layer anpassen
In Zikula gibt es eine Besonderheit zu beachten, welche Einfluss darauf nimmt, wie die aus einem Request resultierende Response zum anfragenden Client gelangt.
Per Standard wird die Response in Symfony im Rahmen einer Controller-Aktion erstellt und zurückgeliefert. Gegebenfalls wird die Response noch von einem oder mehreren Event Subscribern verändert.
Bei Zikula wird noch eine Theme-Schicht dazwischen geschaltet, welche den Inhalt der Response in eine neue Response überführt, um den Layout-Rahmen sowie damit einhergehende, zusätzliche Blöcke usw. zu rendern.
SensioLabs Security Checker wurde eingestellt
Zu den grundlegenden Aufgaben automatisierter Builds zählen unterschiedliche Prüfungen: so bietet es sich an, die Einhaltung der Coding-Styles zu überwachen, Qualitätsmetriken zu erheben und die Testabdeckung zu messen. Auch die regelmäßige Aktualisierung verwendeter Drittkomponenten kann perfekt automatisiert werden, wie wir es in diesem Beitrag für GitHub Actions gezeigt haben.
Ein nützliches Werkzeug, das anhand einer composer.lock Datei etwaige Sicherheitslücken in verwendeten Vendors aufgezeigt hatte, war der SensioLabs Security Checker. Dieser hat die entsprechenden Versionen mit einer Datenbank auf security.symfony.com abgeglichen und entsprechende Probleme gemeldet. Der entsprechende Datenbestand befindet sich ebenfalls auf GitHub.
Kommende Neuerungen in Symfony 5.2
Vor zwei Tagen wurde Symfony 5.2.0-BETA2 veröffentlicht. Dies nehme ich zum Anlass, um einmal einen Überblick über die wichtigsten neuen Funktionen zu geben, auf die wir uns im Rahmen dieses Updates freuen können. Im Folgenden sind die bisher veröffentlichten Blog-Beiträge thematisch nach Komponente sortiert.
- PHP 8
- PHP 8 Attribute
- Attribute für Controller-Argumente
- Attribute für Constraints
- Cache
- Asynchrone Cache-Neuberechnung
- Console
- 24-bit Farben
- Unterstützung für Signale in Commands
- Form
- Callbacks für Data Mapper
- Asserts für Form-Tests
- Form Field Helpers
- FrameworkBundle
- Front Controller Konfiguration
- HttpClient
- EventSource HTTP client
- Retryable HTTP client
- Lock
- Shared locks
- Mailer
- DKIM E-Mail Authentifizierung
- Profiler
- Einfachere Daten-Kollektoren
- Session Profiling
- RateLimiter
- Neue Rate Limiter Komponente
- Security
- Login Throttling
- Login Links
- Semaphore
- Neue Semaphore Komponente
- Translator
- Pseudo-Localization
- Übersetzbare Objekte
- Uid
- Doctrine-Typen für UUID und ULID
- UID-Serialisierung und -Validierung
Lesetipp: das Buch zu Symfony 5 auf deutsch
Das Buch “Symfony 5: The Fast Track” von Fabian Potencier zeigt anhand praktischer Beispiele einen großen Teil der Bandbreite der Symfony-Komponenten. Es eignet sich daher für einen schnellen Einstieg in das Ökosystem, bietet jedoch gleichzeitig auch fortgeschrittenen Nutzern neue Impulse. Schön ist aber insbesondere, dass das Buch in mehr als ein Dutzend Sprachen vorliegt.
Es ist möglich, das Buch online kostenlos anzuschauen. Unabhängig davon kann man auch eine PDF-Version erwerben und somit die weitere Symfony-Entwicklung unterstützen.
Zikula Core 3.0.3 mit Sicherheits-Update von Symfony 5
Vor kurzem hatten wir über das Release von Zikula 3.0.1 berichtet, welches wichtige Korrekturen für Zikula 3 bereitgestellt hat.
Vor einer Woche wurde die nächste Version 3.0.2 veröffentlicht. Allerdings ist kurz danach Symfony 5.1.4 und dann noch Symfony 5.1.5 mit einem Security-Patch erschienen. Daher steht nun auch als neues Release die Version Zikula 3.0.3 zur Verfügung, welche diese Updates ebenfalls zur Verfügung stellt.
Symfony Services asynchron im Hintergrund aufrufen
Oftmals greift man in Symfony-Projekten auf CLI-Kommandos mit Hilfe der Symfony Console-Komponente zurück, um länger laufende Prozesse außerhalb des Webservers durchzuführen. In komplexeren Vorhaben gibt es weitere Ansätze, wie etwa eine Job Queue oder die noch relativ junge Symfony Messenger-Komponente. Diese haben gemeinsam, dass sie eine bestimmte Struktur voraussetzen. Für die Umstellung von Legacy-Code, in dem selbstgeschriebene Jobs mit ReactPHP Event-Loops zum Einsatz kommen, haben wir vorerst einen anderen Weg gewählt, um diese Worker in Einklang mit Symfony zu bringen.









