Um die News-Ausgabe mit weiteren Daten anzureichern, stellt News Events bereit, auf die reagiert werden kann. Das Event wird dabei in Configuration/Services.yaml registiert. In meinem Fall brauche ich in dem EventListener den Zugriff auf ein Repository. ObjectManager->get gilt seit TYPO3 10 als veraltet, injectXXX-Funktionen werden nicht ausgeführt. Was nun? Ein Fall für Dependancy Injection!
Der Basis Event-Listener sieht so aus und wird (in meinem Fall) in Classes/Event abgelegt:
<?php use GeorgRinger\News\Event\NewsDateMenuActionEvent; class EventListener { /** * @var \MyNamespace\MyExtension\Domain\Repository\FooRepository */ protected $fooRepository; /** * @param \MyNamespace\MyExtension\Domain\Repository\FooRepository $fooRepository */ public function __construct(\MyNamespace\MyExtension\Domain\Repository\FooRepository $fooRepository) { $this->fooRepository = $fooRepository; } public function enrichWithAdditionalData(NewsDateMenuActionEvent $event): void { } }
In Configuration/Services.yaml wird der Event-Listener registriert. Gleichzeitig wird definiert, welchen Typ die Variable $fooRepository beim Erstellen des Listeners haben muss. Wichtig sind dabei die letzten zwei Zeilen: dabei wird die Klasse FooRepository als public definiert, damit sie per Depencancy Injection in einem Listener instanziiert werden kann.
services: _defaults: autowire: true autoconfigure: true MyNamespace\MyExtension\Event\EventListener: arguments: $fooRepository: '@MyNamespace\MyExtension\Domain\Repository\FooRepository' tags: - name: event.listener identifier: 'news-event-listener' method: 'enrichWithAdditionalData' event: GeorgRinger\News\Event\NewsDateMenuActionEvent MyNamespace\MyExtension\Domain\Repository\FooRepository: public: true
Neueste Kommentare