情况:
//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不存在。然后继续;但它不会发生
如何检查对象方法的存在?
答案 0 :(得分:19)
如果您尝试捕获任何异常,则应在“异常”之前使用反斜杠。
E.g:
try{
//do stuff here
}
catch(\Exception $e){
error_log($e->getMessage());
}
如果不使用反斜杠,则不会捕获异常。这是由于PHP / Symfony中使用了名称空间的方式。
答案 1 :(得分:4)
Doctrine引发的异常被称为Doctrine\ORM\EntityNotFoundException
,您正在捕捉EntityNotFoundException
。
这就是区别,名称空间很重要。
要调试它,请改为捕获Exception
并观察实际异常的类型。然后更换它。
答案 2 :(得分:1)
异常类型是 - \ 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/>";
}