Довольно плохо знаком с 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 обрабатывает ошибки отлова таким образом? Это проблема со сторонней библиотекой?
Пара вещей:
SocketException
, Вы импортируете полное пространство имен вверху вашего PHP-файла? use SteamCondenser\Exceptions\SocketException;
Также в целях отладки вы можете сделать исключение «поймать все» и вывести тип исключения:
try {
...
}catch(\Exception $e){
dd(get_class($e));
}
Если вы все еще получаете трассировку стека после попытки вышеприведенного кода, то перед началом блока try / catch выдается сообщение об ошибке.
Других решений пока нет …