Häufige Fehler und wie man sie debuggt: leeres Grid, Formular speichert nicht, fehlende Cache-Invalidierung
Häufige Fehler und wie man sie debuggt: leeres Grid, Formular speichert nicht, fehlende Cache-Invalidierung
~9 Min. Lesezeit Zuletzt aktualisiert am 9. August 2026
Dieses Kapitel sammelt die Fehlerbilder, die über die ganze Serie hinweg schon einzeln erwähnt wurden, und ergänzt eine systematische Debugging-Reihenfolge - die drei häufigsten Symptome bei UI-Components-Arbeit.
Symptom 1: Leeres Grid ohne Fehlermeldung
Die häufigste Ursache ist eine falsche provider-Kette (Kapitel 4): Der Wert in js_config/provider muss exakt {listing_name}.{dataSource_name} entsprechen. Prüfschritte in Reihenfolge:
- Browser-Netzwerk-Tab öffnen, nach
mui/index/renderfiltern - kommt der Request überhaupt an, und was liefert die Response? - Bei einer JSON-Response mit leerem
items-Array: Filterlogik im DataProvider prüfen, insbesondere versehentlich zu engeaddFieldToFilter()-Aufrufe. - Bei gar keinem Request:
provider-Kette injs_configgegen den tatsächlichen dataSource-Namen abgleichen. - Bei einem 404/500 auf
mui/index/render: PHP-Exception-Log prüfen (bin/log exception.log) - meist ein Klassenname-Tippfehler imdataProvider-Argument.
Symptom 2: Formular speichert nicht (oder scheinbar gar nichts passiert)
- Redirect auf 404 - der Save-Controller implementiert
HttpPostActionInterfacenicht (Kapitel 12), odersubmit_urlinform.xmlzeigt auf einen falschen Pfad. - Seite lädt neu, aber ohne sichtbare Änderung - Validierungsfehler ohne
DataPersistorInterface(Kapitel 12), die Fehlermeldung erscheint als Session-Message, wird aber leicht übersehen. - Speichern-Button reagiert gar nicht - meist ein JavaScript-Fehler in der Browser-Konsole, oft durch eine defekte
validation-Regel (Kapitel 11) oder ein fehlendes<field>, auf das einimports/exports-Pfad (Kapitel 21) verweist.
Symptom 3: Änderung an XML/PHP wird nicht sichtbar
Verschiedene Dateitypen landen in verschiedenen Caches - die passende Cache-Leerung zu kennen spart viel Zeit:
listing.xml/form.xml-Änderungen -bin/cache-cleanreicht meist (UI-Component- und Layout-Cache, Kapitel 4).acl.xml/menu.xml-Änderungen -cache:cleanplus gegebenenfalls Admin-Logout/Login (Kapitel 3).- Neue/geänderte PHP-Klasse - bei aktivem
di.xml-Compile (Produktionsmodus) istsetup:di:compilenötig, im Entwicklermodus reicht in der Regelcache:clean. db_schema.xml-Änderungen - immersetup:upgrade, niemals nur Cache-Befehle (Kapitel 2).
Achtung: Ein Class-Not-Found- oder "argument missing"-Fehler direkt nach einer di.xml-Änderung (etwa bei einem neuen Modifier-Eintrag, Kapitel 13) ist fast immer ein Compile-Cache-Problem: neue Konstruktor-Argumente oder neue virtualType-Einträge werden im Produktionsmodus erst nach setup:di:compile berücksichtigt - manchmal erst nach einem zweiten Durchlauf, wenn die erste Kompilierung selbst fehlschlägt.
Systematische Debugging-Reihenfolge
- Browser-Konsole und Netzwerk-Tab zuerst - viele Probleme sind rein clientseitig sichtbar, bevor man überhaupt PHP-Code anfasst.
bin/log exception.logundbin/log system.logauf frische Einträge prüfen.- Bei Datenproblemen: direkt in der Datenbank nachsehen (
bin/mysql), ob die erwarteten Zeilen/Spalten überhaupt existieren. - Erst danach: XML-Deklaration Zeile für Zeile gegen ein bekannt funktionierendes Beispiel (etwa aus Kapitel 15/16) vergleichen.
Tipp: Diese Reihenfolge - Browser vor Server, Logs vor Code-Lesen, Datenbank vor Vermutung - spart in der Praxis die meiste Zeit, weil UI-Components-Fehler selten dort auftreten, wo man sie zuerst vermutet.