Bug #47
offen[Bugsink] TYPO3\CMS\Extbase\Property\Exception\TargetNotFoundException: Object of type Qb\DvnlpIntranet\Domain\Model\Member with identity "6111" not found.
0%
Beschreibung
Bugsink: https://bugsink.cytrus.de/issues/issue/b15ddeab-c6c2-47da-af5b-12d12d32d804/event/last/
Typ: NEW issue
Projekt: www-dvnlp-de
Bugsink Alert
TYPO3\CMS\Extbase\Property\Exception\TargetNotFoundException: Object of type Qb\DvnlpIntranet\Domain\Model\Member with identity "6111" not found.
Automatisch erstellt durch n8n
KI-Analyse:
Hier ist die präzise Analyse des Fehlers als Senior TYPO3/PHP Entwickler:
1. Ursache identifizieren¶
Fehler:
TYPO3\CMS\Extbase\Property\Exception\TargetNotFoundException mit der Meldung:
"Object of type Qb\DvnlpIntranet\Domain\Model\Member with identity '6111' not found."
Bedeutung:
- Extbase versucht, ein Domain-Objekt (
Member) mit der UID6111aus der Datenbank zu laden. - Das Objekt existiert nicht (gelöscht, falsche UID, oder Berechtigungsproblem).
- Der Fehler tritt auf, wenn Extbase ein
Member-Objekt über einen Repository-Aufruf (z. B.findByUid()) oder eine Relation (z. B. in einem anderen Objekt referenziert) lädt und die UID nicht gefunden wird.
Kontext:
- Der Stacktrace zeigt, dass der Fehler im Frontend auftritt (kein Backend-Kontext).
- Die Middleware-Kette (
MiddlewareDispatcher) deutet auf eine normale Frontend-Anfrage hin, die über Extbase verarbeitet wird (z. B. Plugin, Controller-Aktion).
2. Fix beschreiben (konkret)¶
Mögliche Lösungsansätze:¶
A) Validierung vor dem Laden (Defensiv-Programmierung)
-
Wo? Im Controller oder Service, der das
Member-Objekt lädt. -
Wie?
$member = $this->memberRepository->findByUid($uid); if (!$member instanceof \Qb\DvnlpIntranet\Domain\Model\Member) { // Fehlerbehandlung: z. B. 404-Seite, Log-Eintrag, oder Default-Objekt throw new \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException('Member not found', 123456789); // ODER: return $this->redirect('listAction'); // Umleitung zur Übersicht }
B) Repository-Methode anpassen
-
Wo? Im
MemberRepositoryder Extension. -
Wie?
public function findByUid($uid) { $query = $this->createQuery(); $query->getQuerySettings()->setIgnoreEnableFields(true); // Falls das Objekt "hidden" ist $member = $query->matching($query->equals('uid', $uid))->execute()->getFirst(); if (!$member) { return null; // Oder eine Exception werfen } return $member; }
C) Datenbank prüfen
- Wo? Direkt in der Datenbank.
-
Wie?
SELECT * FROM tx_dvnlpintranet_domain_model_member WHERE uid = 6111;- Falls das Objekt fehlt: Prüfen, ob es gelöscht wurde oder die UID falsch referenziert ist (z. B. in einer Relation).
- Falls das Objekt existiert, aber nicht geladen wird: Prüfen, ob
deleted=1oderhidden=1gesetzt ist.
D) Extbase-Konfiguration prüfen
-
Wo? In der
ext_typoscript_setup.typoscriptder Extension. -
Wie?
- Sicherstellen, dass das Storage-PID korrekt ist:
plugin.tx_dvnlpintranet { persistence { storagePid = 123 // PID der Seite, wo die Member-Daten liegen } } - Falls das Objekt in einer Relation referenziert wird: Prüfen, ob die Relation korrekt konfiguriert ist (z. B.
foreign_tablein TCA).
- Sicherstellen, dass das Storage-PID korrekt ist:
E) Middleware/Exception-Handling
-
Wo? In einer eigenen Middleware oder im
ErrorHandler. -
Wie?
- Globalen Exception-Handler registrieren, der
TargetNotFoundExceptionabfängt und eine benutzerfreundliche Fehlermeldung anzeigt:// In ext_localconf.php $GLOBALS['TYPO3_CONF_VARS']['SYS']['errorHandlerErrors'] |= E_USER_DEPRECATED; $GLOBALS['TYPO3_CONF_VARS']['SYS']['exceptionalErrors'] |= E_USER_DEPRECATED; // Eigene Exception-Handler-Klasse registrieren $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\TYPO3\CMS\Extbase\Property\Exception\TargetNotFoundException::class] = [ 'className' => \Qb\DvnlpIntranet\Exception\CustomTargetNotFoundException::class, ];
- Globalen Exception-Handler registrieren, der
3. Betroffene TYPO3 Extension¶
-
Extension-Key:
dvnlp_intranet(Namespace:Qb\DvnlpIntranet) -
Betroffene Klasse:
\Qb\DvnlpIntranet\Domain\Model\Member -
Betroffenes Repository:
\Qb\DvnlpIntranet\Domain\Repository\MemberRepository
4. Confidence (0-100%)¶
-
95% – Die Ursache ist klar (fehlendes
Member-Objekt mit UID 6111). - 5% Unsicherheit: Es könnte ein Race-Condition (Objekt wurde zwischen Laden und Speichern gelöscht) oder ein Cache-Problem vorliegen. Dies müsste durch Logs oder Debugging verifiziert werden.
Zusätzliche Empfehlungen¶
-
Logging:
- Loggen Sie fehlgeschlagene Ladeversuche im Repository:
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Log\LogManager::class) ->getLogger(__CLASS__) ->warning('Member with UID ' . $uid . ' not found');
- Loggen Sie fehlgeschlagene Ladeversuche im Repository:
-
Debugging:
- Aktivieren Sie den Extbase-Debug-Modus in der
LocalConfiguration.php:'FE' => [ 'debug' => true, 'devIPmask' => '*', ], - Nutzen Sie die TYPO3-Console für Datenbank-Checks:
typo3cms database:export -t tx_dvnlpintranet_domain_model_member
- Aktivieren Sie den Extbase-Debug-Modus in der
-
Tests:
- Schreiben Sie einen Unit-Test für das Repository, der das Laden eines nicht existierenden Objekts simuliert:
public function testFindByUidReturnsNullForInvalidUid() { $this->assertNull($this->memberRepository->findByUid(999999)); }
- Schreiben Sie einen Unit-Test für das Repository, der das Laden eines nicht existierenden Objekts simuliert:
Zusammenfassung¶
| Punkt | Details |
|---|---|
| Ursache |
Member-Objekt mit UID 6111 existiert nicht in der Datenbank. |
| Fix | Validierung im Controller/Repository + Datenbank-Check. |
| Extension |
dvnlp_intranet (Namespace: Qb\DvnlpIntranet). |
| Confidence | 95% |
Nichts anzuzeigen