2014-04-15 21 views
0

我一直在努力解決這個問題一段時間。我想在我的foreach循環中捕獲任何異常,並繼續循環其他任何數據,但我還想讓用戶知道通過客戶端失敗的原因。所有對我函數的調用都是通過ajax調用來完成的。用戶輸出處理循環中的異常

爲此,我一直在使用下列內容:

$errors = array(); 
    foreach ($form as $index => $data) { 
    try{ 
    //continue, item has been processed 
    }catch(exception $e){ 
     //add some data to the errors array 
     array_push($data, $errors); 
    } 
    } 
    return Response::json($errors); 

這讓我再拿到失敗在我的Ajax響應的項並通知用戶。

我不確定這是最佳實踐還是有更好的方法來做到這一點?有沒有更好的方法可以在不中止循環的情況下將錯誤返回給客戶端?

一些背景信息: 我主要是想在我將數據添加到我的數據庫時使用它。

+0

通常你會用自己的錯誤消息編寫自己的驗證,這對用戶比php或mysql錯誤更有意義 - 「此電子郵件已經註冊」比「重複輸入」hello @ gmail更有用。 com''鍵'PRIMARY'。 – Steve

+0

是的,我明白,我會返回「等等等等,不能被添加到數據庫」或類似的東西。我問什麼是在循環中處理這些問題的最佳方法而不是如何檢查用戶是否存在 – arrowill12

+0

我的觀點是你正在捕獲異常作爲驗證的一部分,例外情況應該用於例外 - 你應該改爲執行你自己的驗證代碼。然後json編碼就沒問題了 – Steve

回答

0

如果你真的想從異常與$data['error'] = $e->getMessage();返回原始郵件給用戶,追加消息到您的數據陣列,像

$errors = array(); 
foreach ($form as $index => $data) { 
    try{ 
    //continue, item has been processed 
    }catch(exception $e){ 
     // append exception message to data 
     $data['error'] = $e->getMessage(); 

     //add some data to the errors array 
     array_push($data, $errors); 
    } 
} 
return Response::json($errors); 

但最好寫你自己的錯誤信息自己的驗證。