我在我的Symfony2應用程序中使用Doctrine的dbal
服務。我該如何處理Doctrine錯誤?
我查詢一個不存在的表,這將引發一個錯誤:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'log.requests_20130311' doesn't exist.
Symfony2中之前,我可以捕獲此,即使是在try-catch
塊。我不希望這會殺死我的應用程序。我該如何處理?
我在我的Symfony2應用程序中使用Doctrine的dbal
服務。我該如何處理Doctrine錯誤?
我查詢一個不存在的表,這將引發一個錯誤:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'log.requests_20130311' doesn't exist.
Symfony2中之前,我可以捕獲此,即使是在try-catch
塊。我不希望這會殺死我的應用程序。我該如何處理?
教義DBAL層是圍繞PDO的包裝,所以你應該能夠做到:
try {
// Query your non-existent table
} catch (\PDOException $e) {
// Deal with it without killing your app
}
舊主題,但是如果驅動程序更改爲ODM或其他任何東西,我們不應該捕獲更通用的異常嗎? – smartius 2016-04-22 15:49:35
每@ Coussinsky的評論,你需要在你的異常前的\
:
try {
$result_set = $this->connection->query($sql);
} catch (\Exception $e) {
return 0;
}
只需訂閱'kernel.exception'事件並捕獲它? (我以前沒有這樣做,這就是爲什麼我發佈了一條評論) – 2013-03-12 22:10:38
@Wouter J你是對的內核異常監聽器捕獲所有的異常(但你可以配置它只捕獲一些異常),如果你想使用一個try catch請務必以這種方式寫你的catch:'catch(\ Exception $ e)'因爲如果你不添加'\'symfony會在你的控制器中搜索異常 – Snroki 2013-03-13 08:44:12
我只需要\。謝謝! – 2013-03-13 14:34:40