2016-01-23 50 views
2

對laravel來說很新,所以我不確定它是如何處理錯誤以及如何最好地捕捉它們的。使用Laravel從庫中捕捉異常5.2

我使用的是第三方遊戲服務器的連接庫,可以以拉等球員,目前的地圖等數據查詢遊戲服務器..

這個庫被稱爲凝汽器:https://github.com/koraktor/steam-condenser

我已經使用作曲家在我的項目中導入了這一切,似乎所有工作都很好,但是我在捕捉庫引發的異常時遇到了問題。

一個示例是您正在查詢的遊戲服務器處於脫機狀態。

這裏是我的代碼:

public function show($server_name) 
{ 
    try{ 
     SteamSocket::setTimeout(3000); 
     $server = server::associatedServer($server_name); 
     $server_info = new SourceServer($server->server_ip); 

     $server_info->rconAuth($server->server_rcon); 

     $players = $server_info->getPlayers(); 
     $total_players = count($players); 

     $more_info = $server_info->getServerInfo(); 

     $maps = $server_info->rconExec('maps *'); 
     preg_match_all("/(?<=fs\)).*?(?=\.bsp)/", $maps, $map_list);  
    }catch(SocketException $e){ 
     dd("error"); 
    } 
    return view('server', compact('server', 'server_info', 'total_players', 'players', 'more_info', 'map_list')); 
} 

如果服務器處於脫機狀態,這將引發SocketException,我試圖抓住,但是這似乎永遠不會發生。然後我得到跟蹤的錯誤頁面。

這會導致一些問題,因爲我希望簡單地告訴最終用戶該服務器處於脫機狀態,但是如果我無法捕獲此錯誤,則無法執行此操作。

我的try/catch有什麼問題嗎? laravel是否會以這種方式處理錯誤?這是第三方庫的問題嗎?

回答

3

有兩件事情:

  • 是否微量鉛的SocketException或不同的錯誤?在拋出SocketException之前可能會捕獲到不同的錯誤。
  • 您的捕獲聲明正在追趕SocketException。你是否在PHP文件的頂部導入完整的名稱空間? use SteamCondenser\Exceptions\SocketException;

還用於調試的目的,你可以做一個異常「一網打盡」和轉儲異常的類型:

try { 
    ... 
}catch(\Exception $e){ 
    dd(get_class($e)); 
} 

如果你還在嘗試上面的代碼後,即可獲取堆棧跟蹤,那麼在try/catch塊啓動之前出錯。

+0

我認爲這已經修復了:)它一定是一個問題,沒有導入類,但我會假設它會拋出classNotFound錯誤。 我試圖捕捉任何異常事件,仍然有同樣的問題,雖然之前我沒有反斜槓在開始。所以已經解決了這個問題。 感謝您的幫助! –