RC2: Type Error in Zusammenhang mit getAllEvents Hook
(verschoben aus getAllEvents Hook - verständliche Anleitung)
Ich klinke mich hier mal ein... Zunächst vielen Dank euch allen, die bisherigen Beiträge fand ich sehr hilfreich.
Ähnlich wie hier von anderen zuvor beschrieben, habe ich bei einem Projekt auch per DCA im Event-Modul ein zusätzliches Auswahlfeld ("custom_hook_filter_rehearsals") ergänzt, um Events je nach getroffener Auswahl dann im getAllEvents-Hook vor der Ausgabe im Frontend zu filtern.
Mein Hook fängt folgendermaßen an (ähnlich der getAllEvents-Hook-Doku):
PHP-Code:
<?php
// src/EventListener/FilterRehearsalListener.php
namespace App\EventListener;
use Contao\CoreBundle\ServiceAnnotation\Hook;
use Contao\Module;
/**
* @Hook("getAllEvents")
*/
#[AsHook('filterRehearsal')]
class FilterRehearsalListener {
public function __invoke(array $events, array $calendars, int $timeStart, int $timeEnd, Module $module): array {
if ( $module->custom_hook_filter_rehearsals == '2' ) {
// ...
Der Hook funktioniert in einer Installation mit Contao 5.5 wunderbar.
In einer Testinstallation habe ich das Projekt nun auf Contao 5.6-RC2 aktualisiert.
Nach dem Update funktioniert der Hook nicht mehr und es gibt folgende Fehlermeldung in der Log-Datei:
[2025-07-25T13:01:37.870893+02:00] request.CRITICAL: Uncaught PHP Exception Twig\Error\RuntimeError: "An exception has been thrown during the rendering of a template ("App\EventListener\FilterRehearsalListener::__inv oke(): Argument #5 ($module) must be of type Contao\Module, Contao\CalendarBundle\Generator\CalendarEventsGene rator given, called in /var/www/html/vendor/contao/calendar-bundle/src/Generator/CalendarEventsGenerator.php on line 108") in "@Contao/content_element/element_group.html.twig" at line 5." at element_group.html.twig line 5 {"exception":"[object] (Twig\\Error\\RuntimeError(code: 0): An exception has been thrown during the rendering of a template ("App\\EventListener\\FilterRehearsalListener::__i nvoke(): Argument #5 ($module) must be of type Contao\\Module, Contao\\CalendarBundle\\Generator\\CalendarEventsG enerator given, called in /var/www/html/vendor/contao/calendar-bundle/src/Generator/CalendarEventsGenerator.php on line 108") in "@Contao/content_element/element_group.html.twig" at line 5. at /var/www/html/vendor/contao/core-bundle/contao/templates/twig/content_element/element_group.html.twig:5)\n[previous exception] [object] (TypeError(code: 0): App\\EventListener\\FilterRehearsalListener::__inv oke(): Argument #5 ($module) must be of type Contao\\Module, Contao\\CalendarBundle\\Generator\\CalendarEventsG enerator given, called in /var/www/html/vendor/contao/calendar-bundle/src/Generator/CalendarEventsGenerator.php on line 108 at /var/www/html/src/EventListener/FilterRehearsalListener.php:32)"} {"request_uri":"https://testprojekt.ddev.site/","request_method":"GET"}
Ich nehme an, das hängt mit PR#3890 zusammen, bei dem der CalendarEventsGenerator ergänzt wurde.
Wenn ich meinen Eventlisterner folgendermaßen ändere:
PHP-Code:
<?php
// src/EventListener/FilterRehearsalListener.php
namespace App\EventListener;
use Contao\CoreBundle\ServiceAnnotation\Hook;
use Contao\CalendarBundle\Generator\CalendarEventsGenerator;
/**
* @Hook("getAllEvents")
*/
#[AsHook('filterRehearsal')]
class FilterRehearsalListener {
public function __invoke(array $events, array $calendars, int $timeStart, int $timeEnd, CalendarEventsGenerator $module): array {
if ( $module->custom_hook_filter_rehearsals == '2' ) {
// ...
Werden im Frontend zwar wieder Veranstaltungen angezeigt, aber nicht gefiltert. In der Log-Datei finden sich dann mehrere Einträge in dieser Art:
[2025-07-25T13:03:35.427878+02:00] php.ERROR: Warning: Undefined property: Contao\CalendarBundle\Generator\CalendarEventsGene rator::$custom_hook_filter_rehearsals {"exception":"[object] (ErrorException(code: 0): Warning: Undefined property: Contao\\CalendarBundle\\Generator\\CalendarEventsG enerator::$custom_hook_filter_rehearsals at /var/www/html/src/EventListener/FilterRehearsalListener.php:44)"} {"request_uri":"https://testprojekt.ddev.site/","request_method":"GET"}
Das "custom_hook_filter_rehearsals" ist mein per DCA ergänztes Auswahlfeld im Modul, d.h. im neuen CalendarEventsGenerator fehlen wohl die Modulfelder/infos.
Wie kommt man denn im EventListener zukünftig an die Modulfelder/-infos ran?