Ситуация:
//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/>"; }