如何在symfony中尝试捕获

时间:2014-05-19 07:03:18

标签: php 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不存在。然后继续;但它不会发生

如何检查对象方法的存在?

3 个答案:

答案 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/>";
    }