Перехват исключений из библиотеки с помощью Laravel 5.2

Довольно плохо знаком с 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 обрабатывает ошибки отлова таким образом? Это проблема со сторонней библиотекой?

2

Решение

Пара вещей:

  • Приводит ли трассировка к SocketException или к другой ошибке? Возможно, что другая ошибка обнаружена до того, как может быть выдано исключение SocketException.
  • Ваше заявление поймать ловит SocketException, Вы импортируете полное пространство имен вверху вашего PHP-файла? use SteamCondenser\Exceptions\SocketException;

Также в целях отладки вы можете сделать исключение «поймать все» и вывести тип исключения:

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

Если вы все еще получаете трассировку стека после попытки вышеприведенного кода, то перед началом блока try / catch выдается сообщение об ошибке.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]