Bug #45
offen[Bugsink] Exception: TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper::getTargetType(): Argument #2 ($row) must be of type array, bool given, called in …
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/bbf242bc-62f0-4fe7-8e1a-2c6ce75e17ed/event/last/
Typ: NEW issue
Projekt: www-dvnlp-de
Bugsink Alert
Exception: TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper::getTargetType(): Argument #2 ($row) must be of type array, bool given, called in …
Automatisch erstellt durch n8n
KI-Analyse:
Analyse des Fehlers¶
1. Ursache identifizieren¶
Der Fehler tritt in TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper auf, genauer in der Methode getTargetType().
-
Fehler:
Argument #2 ($row) must be of type array, bool given
→ Die Methode erwartet ein Array als zweiten Parameter ($row), erhält aber stattdessen einen Boolean-Wert (false). -
Auslöser:
Die Methode wird in Zeile 104 vonDataMapper.phpaufgerufen, wo ein Datenbank-Record (z. B. aus einerSELECT-Abfrage) übergeben werden soll.
Mögliche Gründe:- Eine Datenbankabfrage (z. B. über
QueryBuilderoderConnectionPool) liefert kein Ergebnis (falseodernull), aber der Code geht von einem gültigen Array aus. - Ein Repository oder Model versucht, ein nicht existierendes Objekt zu mappen.
- Ein TypoScript- oder Extbase-Konfigurationfehler, der zu einer falschen Abfrage führt.
- Ein Cache-Problem, bei dem veraltete oder ungültige Daten geladen werden.
- Eine Datenbankabfrage (z. B. über
2. Fix beschreiben (konkret)¶
Schritte zur Behebung:
-
Prüfen, wo die Methode
getTargetType()aufgerufen wird:- In
DataMapper.php(Zeile 104) wird die Methode vermutlich inmapSingleRow()oderthawProperties()verwendet. - Der Fehler deutet darauf hin, dass kein gültiger Datensatz aus der Datenbank geladen wurde.
- In
-
Sicherstellen, dass
$rowein Array ist:-
Vor dem Aufruf von
getTargetType()prüfen, ob$rowein Array ist:if (!is_array($row)) { throw new \RuntimeException('Invalid database row: Expected array, got ' . gettype($row), 1678901234); } -
Alternativ: Die aufrufende Methode (z. B. in einem Repository) so anpassen, dass sie keine leeren Ergebnisse an
DataMapperweitergibt.
-
Vor dem Aufruf von
-
Datenbankabfrage debuggen:
-
Loggen, welche Abfrage den Fehler auslöst (z. B. mit
GeneralUtility::devLog()oderDebugUtility::debug()). -
Prüfen, ob die Abfrage korrekt ist (z. B.
uidoder andere Bedingungen stimmen). -
Beispiel für eine sichere Abfrage:
$query = $this->createQuery(); $query->matching($query->equals('uid', $someUid)); $result = $query->execute(); if ($result->count() === 0) { throw new \RuntimeException('No record found for UID ' . $someUid, 1678901235); }
-
Loggen, welche Abfrage den Fehler auslöst (z. B. mit
-
TypoScript/Extbase-Konfiguration prüfen:
-
Storage Pid prüfen (z. B. in
ext_typoscript_setup.typoscriptoder im Plugin). -
Mapping-Konfiguration in
ext_typoscript_setup.typoscriptoderTCAprüfen.
-
Storage Pid prüfen (z. B. in
-
Cache leeren:
-
Backend-Cache löschen (über TYPO3 Install Tool oder
typo3cms cache:flush). - Opcode-Cache (z. B. OPcache) neu laden.
-
Backend-Cache löschen (über TYPO3 Install Tool oder
3. Betroffene TYPO3 Extension nennen¶
-
Core-Extension:
extbase(insbesondere die Persistence-Schicht). -
Mögliche benutzerdefinierte Extension:
- Der Fehler tritt auf, wenn eine eigene Extension ein Repository oder Model verwendet, das auf einen nicht existierenden Datensatz zugreift.
-
Typische Kandidaten:
- Eine Extension, die Frontend-Plugins oder Backend-Module bereitstellt.
- Eine Extension, die Datenbankabfragen über Extbase-Repositories durchführt.
4. Confidence (0-100%)¶
- 90% Confidence, dass der Fehler durch eine fehlgeschlagene Datenbankabfrage verursacht wird (z. B. ungültige UID oder falsche Query).
- 10% Confidence, dass es sich um ein Konfigurationsproblem (TypoScript, TCA) oder ein Cache-Problem handelt.
Zusammenfassung der nächsten Schritte¶
-
Debugging der Datenbankabfrage:
- Loggen, welche Query den Fehler auslöst.
- Prüfen, ob die Abfrage ein Ergebnis liefert.
-
Sicherheitscheck in
DataMappereinbauen:- Vor
getTargetType()prüfen, ob$rowein Array ist.
- Vor
-
Extension-Code prüfen:
- Repository-Methoden analysieren, die
findByUid()oder ähnliche Abfragen verwenden.
- Repository-Methoden analysieren, die
-
TypoScript-Konfiguration validieren:
- Storage Pid und Mapping-Einstellungen prüfen.
-
Cache leeren:
- TYPO3-Cache und OPcache zurücksetzen.
Falls der Fehler nach diesen Schritten weiterhin besteht, wäre ein Stacktrace mit mehr Kontext (z. B. die genaue Query oder der aufrufende Code) hilfreich.
Nichts anzuzeigen