2013-03-12 125 views
4

我在我的Symfony2應用程序中使用Doctrine的dbal服務。我該如何處理Doctrine錯誤?

我查詢一個不存在的表,這將引發一個錯誤:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'log.requests_20130311' doesn't exist.

Symfony2中之前,我可以捕獲此,即使是在try-catch塊。我不希望這會殺死我的應用程序。我該如何處理?

+0

只需訂閱'kernel.exception'事件並捕獲它? (我以前沒有這樣做,這就是爲什麼我發佈了一條評論) – 2013-03-12 22:10:38

+3

@Wouter J你是對的內核異常監聽器捕獲所有的異常(但你可以配置它只捕獲一些異常),如果你想使用一個try catch請務必以這種方式寫你的catch:'catch(\ Exception $ e)'因爲如果你不添加'\'symfony會在你的控制器中搜索異常 – Snroki 2013-03-13 08:44:12

+0

我只需要\。謝謝! – 2013-03-13 14:34:40

回答

3

教義DBAL層是圍繞PDO的包裝,所以你應該能夠做到:

try { 
    // Query your non-existent table 
} catch (\PDOException $e) { 
    // Deal with it without killing your app 
} 

http://symfony.com/doc/current/cookbook/doctrine/dbal.html

+0

舊主題,但是如果驅動程序更改爲ODM或其他任何東西,我們不應該捕獲更通用的異常嗎? – smartius 2016-04-22 15:49:35

4

每@ Coussinsky的評論,你需要在你的異常前的\

try { 
    $result_set = $this->connection->query($sql); 
} catch (\Exception $e) { 
    return 0; 
}