Exception Handling

Hallo,
ich habe einen Controller erstellt über den ich auf das Customerobjekt zugreife. Beim Zugriff  über $customer->getEmail() bekomme ich nun eine Doctrine\ORM\EntityNotFoundException geworfen da dieses Feld nicht gefüllt ist. Der Controller verabschiedet sich mit einem 503 Error.

Die Exception habe ich nun versucht über try catch abzufangen jedoch ohne Erfolg. Weiterhin 503 und Scriptabbruch.

            try {
                $email = $customer->getEmail();
            } catch (Doctrine\ORM\EntityNotFoundException $e) {
                $email = ‚‘;
            }

Was mache ich falsch? An welchen schrauben kann / muss ich noch drehen um eine Exception abzufangen?

Versuch es mal mit catch ( ** Doctrine\ORM\EntityNotFoundException $e). Also ein \ vor Doctrine. Du musst hier den FQCN nutzen. Sonst sucht er innerhalb deines Namenspaces nach der Exception Klasse.

Es ist aber sehr merkwüdig, dass er an der Stelle diese Exception wirft. Auch wenn getMail leer ist oder $customer nicht existiert, müsste er da was anderes werfen. 

Danke für die Anwort. Das hatte ich auch schon erfolglos getestet.

Den $customer ziehe ich mir über das Orderobjekt.

Das Objekt ist auch gefüllt,  $customer->getId() gibt einen Rückwert,  $customer->getEmail();  schmeißt unten stehende Meldung

Entity of type ‚Shopware\Models\Customer\Customer‘ for IDs id(37) was not found in vendor/doctrine/orm/lib/Doctrine/ORM/EntityNotFoundException.php

 

Das kommt mir sehr sehr merkwüdig vor. getEmail wirft nämlich gar keine Exception. Der Fehler sagt auch eher aus, dass du keinen Customer mit der ID 37 in deiner Datenbank hast. Dein $customer müsste demnach auch leer oder null sein. Ich denke eher, dass es schon einen Fehler beim Abrufen des Kunden auf dem Order Objekt gibt.

1 „Gefällt mir“

Wahrscheinlich liest du den customer mit lazy loading so dass der fehlende Kunde erst zum Problem wird, wenn du aktiv Daten liest. Zeig mal bitte wie du an $customer kommst.

Viele Grüße 

Im Endeffekt nur diese 3 Zeilen:

$order = Shopware()->Models()->getRepository(‘Shopware\Models\Order\Order’)->find($id);

… weiterer Quellcode mit Abruf von Orderdaten …

$customer = $order->getCustomer();
$customer->getEmail();

Sieht problemlos aus. Hats du denn einen Kunden mit ID 37 in der Datenbank?

1 „Gefällt mir“

das ist es…
keine Ahnung wie ich das hinbekommen habe. Über die Bestellung ermittel ich die ID 37, der Customer in der DB hat die ID 38.

Danke fürs denken :wink:

Grin