2010-03-24 57 views
2

我想以某種方式將try catch語句應用於所有Actions以作爲任何未捕獲的異常的逆止器。cakephp - 嘗試/捕捉一個動作

我認爲這對Ajax Actions特別有用,因爲catch語句可以發回一個默認的4xx狀態碼。 Prototype的onFailure()函數然後可以執行客戶端錯誤處理。

我怎麼能做到這一點,而不在蛋糕調度像這樣用一個try/catch包裹行動呼籲:

try { 
    output = $controller->dispatchMethod($params['action'], $params['pass']); 
} 
catch {...} 

沒有任何人有一個建議,或者不碰調度員獲得這種功能的另一個可行的策略?

人們如何看待將異常處理置於Displatcher中?我想象一下,當php 4支持時,蛋糕會有一個內置的機制。

[編輯]我仔細研究了蛋糕錯誤處理。沒有嘗試/捕獲,似乎在功能上有很大的損失。而且,我不願意混合cakeErrors和其他異常。

回答

1

我不太確定你爲什麼想要這樣做。您可以檢查PARAMS,看它是否在使用控制器Ajax調用,

if($this->params['requested']) 

我不知道你的應用程序可能會造成什麼樣的異常,但如果它是一個缺少的動作,查看或類似的,蛋糕會輸出一個錯誤頁面,您可以在app/views/errors文件夾中進行自定義。

該書對如何處理使用錯誤的一些信息CakePHP的內置在這裏的錯誤處理程序,http://book.cakephp.org/2.0/en/development/errors.html

你也可以有一個谷歌周圍創建自己的自定義錯誤處理程序,或延長內置的文章和教程在一箇中,以便它將調度週期的核心中的所有調度調用包裝在一個try {} catch {}中。

+0

更換線

$Dispatcher->dispatch($url); 

這些都不是像 '失蹤行動' 一般錯誤。它們通常是通過聯繫其他Web服務或與服務器上運行的其他應用程序(即圖像生成器)或緩存引擎一起工作而生成的。它們通常由Action中的異常處理來處理。我只是在尋找一種能夠爲未被捕獲的異常提供一些通用處理的後援。這在我給出的例子中很有用。感謝您的鏈接。我將研究如何使用PHP 4/Cake的方式:ErrorHandler類。謝謝。 – joshs 2010-03-24 15:25:56

+0

啊我看到了,因爲我可以捕獲並處理調用外部服務的操作中的錯誤代碼,然後打開響應代碼並拋出一個錯誤。 – 2010-03-24 16:38:10

+0

最終目標可能是捕獲操作中的所有異常,但最好有一個支持......特別是在beta測試期間。另外,Exceptions的意義在於將意外的案例處理移動到正常案例邏輯之外。我不希望自己的行爲成爲精心設計的異常處理程序......特別是在開發過程中,當不清楚哪些異常實際上會頻繁拋出時。 – joshs 2010-03-24 17:13:33

1

在應用程序/ Web根目錄/ index.php文件與

try { 
    $Dispatcher->dispatch($url);  
} catch(Exception $e) { 
    // do exception handling 
}