Bug #87
offen[Bugsink] Exception: count(): Argument #1 ($value) must be of type Countablearray, string given
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/cb6c8efc-2987-4949-a039-fe7136b6ec3a/event/last/
Typ: NEW issue
Projekt: www-rietberg-de
Bugsink Alert
Exception: count(): Argument #1 ($value) must be of type Countablearray, string given
Automatisch erstellt durch n8n
KI-Analyse:
Analyse des Fehlers¶
1. Ursache identifizieren¶
Der Fehler tritt auf, weil die PHP-Funktion count() auf eine String-Variable angewendet wird, obwohl sie nur mit Countable-Objekten oder Arrays funktioniert.
Konkrete Ursache:
- Irgendwo im Code (vermutlich in einer Middleware oder einem Request-Handler) wird eine Variable an
count()übergeben, die kein Array oder Countable-Objekt ist, sondern ein String. - Der Fehler tritt in der Middleware-Kette von TYPO3 auf, insbesondere in
/vendor/typo3/cms-core/Classes/Http/MiddlewareDispatcher.php. - Mögliche Szenarien:
- Eine Middleware oder ein Request-Handler erwartet ein Array (z. B.
$_GET,$_POST,$_SERVER), erhält aber stattdessen einen String. - Eine Extension oder ein benutzerdefinierter Code gibt einen String zurück, wo ein Array erwartet wird.
- Ein TYPO3-Kern-Update (z. B. von TYPO3 v9 auf v10/v11) hat die Typenprüfung verschärft, sodass alte Code-Stellen nun Fehler werfen.
- Eine Middleware oder ein Request-Handler erwartet ein Array (z. B.
2. Fix beschreiben (konkret)¶
Mögliche Lösungen:
a) Typprüfung vor count() einfügen¶
Falls der Fehler in eigenem Code auftritt:
// Vorher (fehlerhaft):
if (count($variable)) { ... }
// Nachher (sicher):
if (is_array($variable) || $variable instanceof \Countable) {
if (count($variable)) { ... }
} else {
// Fallback für Strings (z. B. leeren String als "0" behandeln)
if (!empty($variable)) { ... }
}
b) Middleware/Extension prüfen¶
Falls der Fehler in einer Middleware oder Extension auftritt:
-
Debugging-Schritte:
- Stack-Trace analysieren (welche Middleware wirft den Fehler?).
-
Datenquelle prüfen (z. B.
$request->getQueryParams(),$request->getParsedBody()). -
Typumwandlung erzwingen (z. B.
is_array($data) ? $data : []).
c) TYPO3-Kern-Fix (falls nötig)¶
Falls der Fehler im TYPO3-Kern liegt (z. B. in MiddlewareDispatcher):
-
Temporärer Workaround (nicht empfohlen für Produktion!):
// In der betroffenen Middleware: $data = $request->getAttribute('someAttribute'); if (!is_array($data) && !$data instanceof \Countable) { $data = []; } count($data); // Jetzt sicher -
Langfristige Lösung:
- Issue im TYPO3-Bugtracker melden (falls noch nicht vorhanden).
- Auf ein Core-Update warten, das den Fehler behebt.
3. Betroffene TYPO3 Extension nennen¶
Der Fehler tritt nicht direkt in einer Extension auf, sondern in der Middleware-Kette des TYPO3-Kerns.
Allerdings könnte eine benutzerdefinierte Extension oder Middleware den Fehler auslösen, indem sie:
- Einen String statt eines Arrays an eine TYPO3-Kern-Methode übergibt.
- Eine Request-Attribute falsch setzt (z. B.
$request->withAttribute('data', 'string')statt$request->withAttribute('data', [])).
Mögliche Kandidaten:
-
Eigene Middleware (z. B. in
ext_localconf.phpregistriert). -
Drittanbieter-Extensions, die mit Request-Handling arbeiten (z. B.
EXT:news,EXT:form,EXT:solr). - Veraltete Extensions, die nicht mit neueren TYPO3-Versionen kompatibel sind.
Empfehlung:
-
Alle Extensions auf Aktualität prüfen (
composer outdated). -
Eigene Middleware debuggen (z. B. mit
var_dump($request->getAttributes())).
4. Confidence (0-100%)¶
| Aspekt | Confidence |
|---|---|
| Ursache (String statt Array/Countable) | 95% |
| Fix (Typprüfung oder Datenvalidierung) | 90% |
| Betroffene Extension (Middleware oder Drittanbieter-Code) | 80% |
| TYPO3-Kern als Ursache (unwahrscheinlich, aber möglich) | 30% |
Gesamt-Confidence: ~85%
(Der Fehler ist klar, aber die genaue Stelle muss noch debuggt werden.)
Zusammenfassung & nächste Schritte¶
-
Debugging starten:
- Stack-Trace analysieren (welche Middleware wirft den Fehler?).
-
Datenquelle prüfen (z. B.
$request->getQueryParams()).
- Typprüfung einbauen (falls eigener Code betroffen).
- Extensions aktualisieren (insbesondere Middleware-basierte).
- Falls nötig: Workaround im TYPO3-Kern (nur temporär!).
- Issue im TYPO3-Bugtracker melden, falls der Fehler im Kern liegt.
Beispiel-Debugging-Code:
// In der betroffenen Middleware:
$data = $request->getAttribute('someAttribute');
var_dump(gettype($data), $data); // Prüfen, was wirklich übergeben wird
if (!is_array($data) && !$data instanceof \Countable) {
$data = []; // Fallback
}
count($data); // Jetzt sicher
Nichts anzuzeigen