Projekt

Allgemein

Profil

Aktionen

Bug #47

offen

[Bugsink] TYPO3\CMS\Extbase\Property\Exception\TargetNotFoundException: Object of type Qb\DvnlpIntranet\Domain\Model\Member with identity "6111" not found.

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/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 UID 6111 aus 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 MemberRepository der 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=1 oder hidden=1 gesetzt ist.

D) Extbase-Konfiguration prüfen

  • Wo? In der ext_typoscript_setup.typoscript der 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_table in TCA).

E) Middleware/Exception-Handling

  • Wo? In einer eigenen Middleware oder im ErrorHandler.
  • Wie?
    • Globalen Exception-Handler registrieren, der TargetNotFoundException abfä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,
      ];
      

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

  1. 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');
      
  2. 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
      
  3. 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));
      }
      

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

Aktionen

Auch abrufbar als: Atom PDF