2010-04-28 186 views
4

我們正在構建一個基於Good old codeigniter框架的PHP應用程序,並且遇到了由多個模型調用組成的大規模鏈接操作問題,這些操作一起是數據庫大事務的一部分。在PHP中處理錯誤

我們希望能夠做一個動作列表,並從函數返回每個動作的狀態報告,無論結果如何。

我們的第一個初步想法是利用PHP5的異常,但由於我們還需要不破壞腳本執行的狀態消息,這是我們提出的解決方案。

它去有點像這樣:

$sku = $this->addSku($name); 

if ($sku === false) { 
    $status[] = 'Something gone terrible wrong'; 
    $this->db->trans_rollback(); 
    return $status; 
} 

$image= $this->addImage($filename); 

if ($image=== false) { 
    $error[] = 'Image could not be uploaded, check filesize'; 
    $this->db->trans_rollback(); 
    return $status; 
} 

我們的控制器是這樣的:

$var = $this->products->addProductGroup($array); 

if (is_array($var)) { 

    foreach ($var as $error) { 
     echo $error . '<br />'; 
    } 

} 

這似乎是一個非常脆弱的解決方案做我們所需要的,但它沒有可擴展性例如,與純粹的PHP例外情況相比,這兩種方法都不起作用

這真的是這種東西通常在基於MVC的應用程序中處理的方式嗎?

謝謝!

更新: 已經做了一個公平的谷歌搜索,發現這個PHP函數:register_shutdown_function。 難道這就是我們正在尋找的?我不知道,不能得到它的工作,我們希望它... 參考方式:http://php.net/manual/de/function.register-shutdown-function.php

+0

Original post updated。 – Industrial 2010-04-30 11:11:32

回答

2

您可以在PHP自定義異常處理程序 - http://php.net/manual/en/function.set-exception-handler.php

這將允許腳本繼續執行。 YOu可以創建一個將狀態記錄到數據庫中的函數。另一個功能和/或類可以獲取這些更新當前狀態報告。如果你拋出一個自定義的豁免ie.throw StatusException,你的自定義處理程序可以選擇異常類型,並對其他標準異常執行默認操作時進行適當的日誌記錄...

也可以使用數據庫處理程序將信息存儲到會話對象中,以便稍後在當前會話中引用。

如果使用異常處理程序是正確的事情,我仍然不確定,因爲我仍然對你想要做的事情有點模糊,但是我的方法將允許代碼執行在處理異常時繼續。

+0

這真的很有趣。我正在閱讀它,並試圖瞭解它是如何工作的,以及我們是否可以從中受益。使用更接近於純粹的PHP例外的東西肯定會比例子中顯示的更清晰的代碼... – Industrial 2010-04-28 21:41:31

+0

再次嗨!嘗試了自定義異常處理程序,但我無法讓它停止。以下是PHP.net所說的:「執行將在exception_handler後停止」。你是怎麼做到的? – Industrial 2010-04-30 11:09:56