Intereting Posts

Как попытаться поймать в 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 загружает ok, getForestTrollType тоже должен быть загружен ok, но до этого это проблема, getRandomBrokenTrollType () намеренно не существует, а затем я вижу сообщение в консоли:

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

это должно быть: ПРЕДУПРЕЖДЕНИЕ: TROLL ENTITY НЕ СУЩЕСТВУЕТ. а затем продолжить; но этого не происходит

Как проверить существующий метод объекта?

Исключение, созданное Doctrine, называется Doctrine\ORM\EntityNotFoundException и вы EntityNotFoundException .

Это разница, пространство имен имеет значение.

чтобы отладить это, перехватите Exception и обратите внимание на тип фактического исключения. затем замените его.

если вы пытаетесь поймать какое-либо исключение, вы должны использовать обратную косую черту перед «Исключением».

Например:

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

Если вы не используете обратную косую черту, исключение не будет обнаружено. Это связано с тем, как пространства имен используются в PHP / Symfony.

Тип исключения – \ Doctrine \ ORM \ EntityNotFoundException Не забудьте запустить «\» Пример –

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