我正在為我的代碼使用 DB::transaction() 并且它作業正常,還測驗了兩個相關表中不匹配的 ID 可能出現的錯誤。但是如果發生任何意外錯誤并且事務阻止它,我如何向用戶顯示錯誤訊息而不是 laravel 錯誤?
我的代碼看起來像這樣
DB::transaction(function() {
DB::table('table1')->insert([ // some data insert ]);
DB::table('table2')->insert([ // some data insert ]); }
我想知道我是否可以將它包裝成這樣的嘗試捕獲:
try {
DB::transaction(function() {
DB::table('table1')->insert([ // some data insert ]);
DB::table('table2')->insert([ // some data insert ]);
} catch (Exception $e) {
return redirect->back()->with('error', error message)
}
而且我在每 10 分鐘執行一次的命令中有此代碼,我可以做同樣的事情,但不回傳錯誤訊息(因為沒有用戶會看到它)向管理員發送電子郵件,說明有錯誤?就像是:
public function handle() {
try {
DB::transaction(function() {
DB::table('table1')->insert([ // some data insert ]);
DB::table('table2')->insert([ // some data insert ]);
} catch (Exception $e) {
Mail::to('adminmail')->send('$error_message');
}
}
我應該走哪條路?
uj5u.com熱心網友回復:
答案是肯定的,當然你可以為這個問題添加一個 try/catch,因為你打算把這個登錄放在一個 cronjob 中,所以不需要向應用程式回傳任何錯誤訊息,所以更好的選擇是給管理員發送電子郵件錯誤訊息,所以這個邏輯應該有效
public function handle() {
try {
DB::transaction(function() {
DB::table('table1')->insert([ // some data insert ]);
DB::table('table2')->insert([ // some data insert ]);
}
} catch (Exception $e) {
Mail::to('adminmail')->send($e->getMessage());
}
}
此外,如果您不想每 10 分鐘向管理員發送每條錯誤訊息,您可以在應用程式中添加Sentry以進行錯誤處理(它確實會花費一些,但它可以挽救生命);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/504034.html
