2014-05-19 13 views
7

Situazione:Come Prova Cattura in 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); 
} 

carichi getFrostTrollType ok, getForestTrollType devono essere caricati ok troppo, ma prima di questo, si tratta di un problema, getRandomBrokenTrollType() volutamente non esiste, e poi vedo messaggio nella console:

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

deve essere: AVVISO: L'ENTITÀ TROLL NON ESISTE. e poi continua; ma non succede

Come verificare l'esistenza del metodo di un oggetto?

+0

cosa non accade? L'avviso o il continuare? O nessuno dei due? – GolezTrol

+0

Tutto blocco catch – user3383675

risposta

4

l'eccezione generata da Doctrine è denominata Doctrine\ORM\EntityNotFoundException e si sta rilevando EntityNotFoundException.

Questa è una differenza, lo spazio dei nomi è importante.

per eseguire il debug di questo, prendere invece Exception e osservare il tipo dell'eccezione effettiva. quindi sostituirlo.

+0

L'ho fatto, e poi ho scoperto che sono stupido. Ho fatto una copia del blocco catch try da un altro script per fare un po 'di modifica solo nel nuovo script, ma ho dimenticato di aggiungere la riga "use ...;" ... – user3383675

15

se si sta tentando di rilevare eventuali eccezioni, è necessario utilizzare una barra rovesciata prima di "Eccezione".

Es .:

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

Se non si utilizza una barra rovesciata, l'eccezione non sarà catturato. Ciò è dovuto al modo in cui gli spazi dei nomi sono utilizzati in PHP/Symfony.

1

tipo di eccezione è - \ Doctrine \ ORM \ EntityNotFoundException Non dimenticare di partenza "\" Esempio -

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