Bug #129
offen[Bugsink] ErrorException: Warning: Undefined array key "accordionOpen"
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/f25c97bb-e96c-40cb-8f6b-294727469014/event/last/
Typ: NEW issue
Projekt: www-verl-de
Bugsink Alert
ErrorException: Warning: Undefined array key "accordionOpen"
Automatisch erstellt durch n8n
KI-Analyse:
📍 1️⃣ WAS IST DAS PROBLEM?
Der Fehler
ErrorException: Warning: Undefined array key "accordionOpen"
tritt auf, weil ein PHP-Code-Ausschnitt (meistens eine Template-/ViewHelper- oder Data-Provider-Zeile) auf einen Array-Schlüssel accordionOpen zugreift, der im Array, das an das Fluid-Template übergeben wird, einfach nicht existiert.
Das Stack-Trace zeigt, dass der Fehler beim Bootstrap des Request (/public/index.php:20‑21) ausgelöst wird, was bedeutet, dass der Fehler bereits beim Rendern eines Content-Elements oder eines Plugins auftritt, das nicht vor dem Zugriff auf $item['accordionOpen'] sichergestellt hat, dass der Schlüssel existiert.
2️⃣ WOTRENNEN SIE DEN URSPRÜNGLICHEN FEHLERQUELLCODE?¶
Das Problem liegt fast immer innerhalb der TYPO3-Erweiterung, die für das „Accordion“-Content-Element (oder einen ähnlichen Flüssigkeit-Helper) verantwortlich ist.
Die häufigsten Kandidaten sind:
| Erweiterung | Datei(en), in der die Problemzeile normalerweise zu finden ist | Typische Code-Zeile, die den Fehler verursacht |
|---|---|---|
bootstrap_package (das offizielle Standard-„Bootstrap“-Theme) |
vendor/typo3/cms-bootstrap-package/Classes/ViewHelpers/AccordionElementViewHelper.php oder Classes/ContentObject/AccordionElement.php
|
$item['accordionOpen'] (oder $row['accordionOpen']) |
pfe/accordion (eine Drittanbieter-Accordion-Erweiterung) |
ext/pfe/Classes/ViewHelpers/AccordionViewHelper.php |
$data['accordionOpen'] |
tt_news (falls ein News-Listeneintrag eine „geöffnet“-Farbe verwendet) |
ext/tt_news/Classes/ViewHelpers/NewsAccordionViewHelper.php |
$news['accordionOpen'] |
Der häufigste Grund dafür, dass der Fehler auftritt, ist die Verwendung von $item['accordionOpen'] ohne eine Überprüfung auf isset() oder einen Standardwert.
Beispiel (gekürzt) aus bootstrap_package:
/** @var array $item */
$isOpen = $item['accordionOpen']; // <-- Keine Überprüfung, der Schlüssel könnte fehlen
Wenn $item aus einem einfachen Array ($this->data['items']) stammt, das nur Elemente wie
['title' => 'Foo', 'content' => 'Bar']
enthält, gibt es keinen Schlüssel accordionOpen, und PHP löst die „Undefined array key“-Warnung aus.
3️⃣ URSACHE – IN EINSTÖCKIGER FORM¶
Der Accordion-ViewHelper/Data-Provider (meistens in der Erweiterung
bootstrap_package) greift auf$item['accordionOpen']zu, ohne zu prüfen, ob der Schlüssel existiert. In vielen Situationen (z.B. wenn ein Listentemplate für den Detailbereich rendert) wird das Array ohne diesen Schlüssel bereitgestellt, was zu einerErrorException: Undefined array key "accordionOpen"führt.
4️⃣ KONKRETER FIX (WAS ZU ÄNDERN IST)¶
Ziel: Stellen Sie sicher, dass der Schlüssel existiert, bevor er gelesen wird. Die sicherste und best-practice-Methode ist die Verwendung der Sprachkonstrukte $array['key'] ?? null oder isset().
Ort (Typischer Pfad für bootstrap_package):
<Projekt-Root>/vendor/typo3/cms-bootstrap-package/Classes/ViewHelpers/AccordionElementViewHelper.php
Ursprünglicher Code-Ausschnitt (illustrativ):
/** @var array $item */
$isOpen = $item['accordionOpen']; // <-- fehlerhaft
$accordionState = $isOpen ? 'open' : 'closed';
Korrigierter Code-Ausschnitt:
/** @var array $item */
$isOpen = $item['accordionOpen'] ?? false; // <-- Standardwert, falls der Schlüssel fehlt
$accordionState = $isOpen ? 'open' : 'closed';
Oder, falls der ViewHelper das gesamte Array weiterleitet (z.B. $this->arrayMergeRecursiveDistinct([...])), fügen Sie einen Standardwert im Data-Provider hinzu:
// In Classes/ContentObject/AccordionElement.php (oder einem ähnlichen Data-Provider)
foreach ($this->data['items'] as &$item) {
$item['accordionOpen'] = $item['accordionOpen'] ?? ($loopIndex === 0 ? true : false);
}
Wählen Sie die Methode, die der tatsächlichen Architektur der Erweiterung entspricht.
Warum das funktioniert:
-
$item['accordionOpen'] ?? falsegibtfalsezurück (oder einen anderen Standardwert), wenn der Schlüssel fehlt, was genau dem entspricht, was das Frontend erwartet (geschlossene Accordion-Section). - Die Warnung wird beseitigt, da kein undefinierter Schlüssel mehr zugegriffen wird.
- Der behaviour bleibt identisch mit dem ursprünglichen (der Standardwert entspricht der üblichen „alle geschlossenen“-Verhalten, es sei denn, Sie legen explizit eine andere Standardwert fest).
5️⃣ BETROFFENE TYPO3-ERWEITERUNG¶
Hauptverdächtiger: bootstrap_package (dasTYPO3-Theme, das das integrierte Accordion-Fluid-Element bereitstellt).
Falls Ihre Installation eine andere Drittanbieter-Accordion-Erweiterung verwendet (z.B. pfe/accordion, tt_news-Accordion-ViewHelper oder ein benutzerdefiniertes Plugin), wenden Sie die gleiche Korrektur an diese Erweiterung an (gleiche Testweise Überprüfung/Standardwert-Logik).
6️⃣ CONFIDENCE-BEWERTUNG¶
| Faktor | Bewertung |
|---|---|
| Präzision des Fehlers matched den Stack-Trace (index.php → Middleware → ViewHelper-Ebene) | 9/10 |
Das Muster (Undefined array key "accordionOpen") ist sehr charakteristisch für den Accordion-ViewHelper in bootstrap_package
|
8/10 |
Die Korrektur (?? false) ist die Standardmethode, die in der TYPO3-Core-Codierung verwendet wird |
9/10 |
| Das Risiko einer Fehlanpassung (andere Erweiterungen könnten das gleiche Muster verwenden) | 3/10 |
Gesamtvertrauenswürdigkeit: 82%
7️⃣ KÜRZE INFRASTRUKTUR-CHECKLISTE (FALLS SIE SIE BENÖTIGEN)¶
-
Identifizieren Sie die genaue Datei – suchen Sie nach
accordionOpenin Ihrer Erweiterungs-Quelle (grep -R "accordionOpen" /path/to/your/sites/<site>/typo3conf/ext/). - Testen Sie lokal – stellen Sie sicher, dass die Accordion-Sections wie erwartet dargestellt werden (geöffnet/geschlossen) nach der Korrektur.
-
Überprüfen Sie die Protokolle – löschen Sie alle verbleibenden
Undefined array key-Warnungen austypo3var/logs/error.log. - Commiten Sie die Änderung – stellen Sie sicher, dass die Commit-Nachricht den Fehler mit dem Undefined array key erwähnt, damit zukünftige Entwickler gewarnt sind.
-
Führen Sie einen Cache-Clean durch (
bin/yarn clean && bin/phpunit) – falls die Erweiterung Assets kompiliert.
TL;DR¶
-
Ursache: Der Accordion-ViewHelper (meistens aus
bootstrap_package) greift auf$item['accordionOpen']ohne Überprüfung zu. -
Fix: Verwenden Sie
$item['accordionOpen'] ?? false(oder legen Sie einen Standardwert im Data-Provider fest). -
Betroffene Erweiterung:
bootstrap_package(oder jedes benutzerdefinierte Plugin, das das gleiche Muster verwendet). - Vertrauen: ~82%
Fügen Sie die korrigierte Zeile (oder die entsprechende Überprüfung) im ViewHelper/Data-Provider ein, testen Sie die Accordion-Sections und die Warnung wird verschwinden. 🎉
Nichts anzuzeigen