使用Laravel 5.2从库中捕获异常

时间:2016-01-23 23:54:29

标签: php laravel error-handling steam-condenser

对laravel来说很新,所以我不确定它如何处理错误以及如何最好地捕获它们。

我使用第三方游戏服务器连接库,可以查询游戏服务器,以便提取玩家,当前地图等数据。

此库名为Steam Condenser:https://github.com/koraktor/steam-condenser

我已经在我的项目中使用composer导入了这个,但似乎一切正常,但是我在捕获库引发的异常方面遇到了麻烦。

一个例子是您要查询的游戏服务器处于离线状态。

这是我的代码:

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是否以这种方式处理错误?这是第三方库的问题吗?

1 个答案:

答案 0 :(得分:3)

一些事情:

  • 跟踪是否会导致SocketException或其他错误?在抛出SocketException之前,可能会捕获到不同的错误。
  • 您的捕获语句正在捕捉SocketException。您是否在PHP文件的顶部导入完整的命名空间? use SteamCondenser\Exceptions\SocketException;

同样出于调试目的,你可以做一个例外&#34;赶上所有&#34;并转储异常类型:

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

如果在尝试上述代码后仍然获得堆栈跟踪,则在try / catch块启动之前会抛出错误。