2014-05-19 13 views
7

sytuacja:Jak Spróbuj złapać w symfony

//trollCommand.php 
[...] 
foreach ($trolltypes as $type) { //$type=={"Frost","RandomBroken","Forest"} 
    try { 
     $output->writeln($type); 
     $troll={"get".$type."TrollType"}(); 
     $output->writeln("TEST 1"); 
     $troll->__load(); 
     $output->writeln("TEST 2"); 
    } catch (EntityNotFoundException $e) { 
     $output->writeln("WARNING: TROLL ENTITY DOES NOT EXIST."); 
     continue; 
    } 
    $output->writeln("TROLLING"); 
    do_something_with_troll($troll); 
} 

getFrostTrollType ładunki Ok, getForestTrollType należy załadować ok też, ale przed tym, że jest to problem, getRandomBrokenTrollType() celowo nie istnieje, a potem widzę wiadomość w konsoli:

Frost 
Test 1 
Test 2 
TROLLING 
RandomBroken 
Test 1 
[Doctrine\ORM\EntityNotFoundException] 
Entity was not found. 
//[EXIT FROM SCRIPT] 
[email protected] ~/trollSandbox/ $ _ 

Powinno być: OSTRZEŻENIE: JUŻ TROLL NIE WYSTĘPUJE. a następnie kontynuować; ale tak się nie stało:

Jak sprawdzić istniejącą metodę obiektu?

+0

Co się nie dzieje? Ostrzeżenie lub kontynuować? Albo nie? – GolezTrol

+0

Cały blok catch – user3383675

Odpowiedz

4

Wyjątek zgłoszony przez Doctrine nazywa się Doctrine\ORM\EntityNotFoundException, a Ty łowisz EntityNotFoundException.

To różnica, przestrzeń nazw ma znaczenie.

do debugowania tego, złap numer Exception i obserwuj typ faktycznego wyjątku. następnie wymień go.

+0

Zrobiłem to, a potem odkryłem, że jestem głupi. Zrobiłem kopię bloku catch próby z innego skryptu, aby edytować tylko w nowym skrypcie, ale zapomniałem dodać wiersz "użyj ...;" ... – user3383675

15

jeśli próbujesz złapać wyjątek, powinieneś użyć odwrotnego ukośnika przed "Wyjątkiem".

Np .:

try{ 
    //do stuff here 
} 
catch(\Exception $e){ 
    error_log($e->getMessage()); 
} 

Jeśli nie używać ukośnika, wyjątek nie zostanie złapany. Wynika to z tego, jak przestrzenie nazw są używane w PHP/Symfony.

1

Typ wyjątku jest - \ Doctrine \ ORM \ EntityNotFoundException Nie zapomnij rozpoczęciem "\" Przykład -

try { 
     $entityManager = $this->getEntityManager(); 
     $entityManager->remove($entity); 
     $entityManager->flush(); // save to the database 
    } catch (\Doctrine\ORM\EntityNotFoundException $ex) { 
     echo "Exception Found - " . $ex->getMessage() . "<br/>"; 
    } 
Powiązane problemy