Projekt

Allgemein

Profil

Aktionen

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 …

Von Bug Sink vor 9 Tagen hinzugefügt.

Status:
Neu
Priorität:
wichtig
Zugewiesen an:
-
Beginn:
15.06.2026
Abgabedatum:
% erledigt:

0%

Geschätzter Aufwand:

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 von DataMapper.php aufgerufen, wo ein Datenbank-Record (z. B. aus einer SELECT-Abfrage) übergeben werden soll.
    Mögliche Gründe:
    • Eine Datenbankabfrage (z. B. über QueryBuilder oder ConnectionPool) liefert kein Ergebnis (false oder null), 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.

2. Fix beschreiben (konkret)

Schritte zur Behebung:

  1. Prüfen, wo die Methode getTargetType() aufgerufen wird:

    • In DataMapper.php (Zeile 104) wird die Methode vermutlich in mapSingleRow() oder thawProperties() verwendet.
    • Der Fehler deutet darauf hin, dass kein gültiger Datensatz aus der Datenbank geladen wurde.
  2. Sicherstellen, dass $row ein Array ist:

    • Vor dem Aufruf von getTargetType() prüfen, ob $row ein 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 DataMapper weitergibt.
  3. Datenbankabfrage debuggen:

    • Loggen, welche Abfrage den Fehler auslöst (z. B. mit GeneralUtility::devLog() oder DebugUtility::debug()).
    • Prüfen, ob die Abfrage korrekt ist (z. B. uid oder 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);
      }
      
  4. TypoScript/Extbase-Konfiguration prüfen:

    • Storage Pid prüfen (z. B. in ext_typoscript_setup.typoscript oder im Plugin).
    • Mapping-Konfiguration in ext_typoscript_setup.typoscript oder TCA prüfen.
  5. Cache leeren:

    • Backend-Cache löschen (über TYPO3 Install Tool oder typo3cms cache:flush).
    • Opcode-Cache (z. B. OPcache) neu laden.

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

  1. Debugging der Datenbankabfrage:
    • Loggen, welche Query den Fehler auslöst.
    • Prüfen, ob die Abfrage ein Ergebnis liefert.
  2. Sicherheitscheck in DataMapper einbauen:
    • Vor getTargetType() prüfen, ob $row ein Array ist.
  3. Extension-Code prüfen:
    • Repository-Methoden analysieren, die findByUid() oder ähnliche Abfragen verwenden.
  4. TypoScript-Konfiguration validieren:
    • Storage Pid und Mapping-Einstellungen prüfen.
  5. 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

Aktionen

Auch abrufbar als: Atom PDF