В `GuzzleHttp\Client` можно обрабатывать ошибки с помощью конструкции `try...catch`, что позволяет поймать исключения, возникающие при выполнении HTTP-запросов. Ниже приведен пример использования этой конструкции, а также способ, как выводить ошибки на экран в методе `actionJson`.
Пример обработки ошибок в методе `actionJson`:
```php
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Illuminate\Http\JsonResponse;
public function actionJson(): JsonResponse
{
$client = new Client();
try {
$response = $client->request('GET', 'https://api.example.com/data');
$data = json_decode($response->getBody(), true);
return response()->json($data);
} catch (RequestException $e) {
// Если вы хотите увидеть ошибку на экране
$errorMessage = $e->getMessage();
// Также можно записать информацию в лог
\Log::error('GuzzleHttp Error: ' . $errorMessage);
// Форматируем ответ с ошибкой для клиента
return response()->json([
'error' => 'Произошла ошибка при выполнении запроса.',
'message' => $errorMessage // Можно убрать, если не хотите выводить подробности
], $e->getCode() ?: JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
}
}
```
В этом примере, если возникает исключение при выполнении HTTP-запроса, оно будет поймано, и вы сможете обработать его. Вы можете записать информацию об ошибке в файл журнала Laravel с помощью `\Log::error()`, а также вернуть пользователю форматированный ответ с ошибкой.
### Объяснение компонентов кода:
1. **`try` блок** - здесь вы помещаете код, который может вызвать исключение.
2. **`catch (RequestException $e)`** - здесь вы перехватываете исключение, чтобы обработать его.
3. **`$e->getMessage()`** - вы получаете текстовое сообщение об ошибке, которое можно выводить на экран или логировать.
4. **`response()->json([...])`** - возвращает JSON-ответ клиенту с информацией об ошибке.
5. **`$e->getCode()`** - используется для получения кода состояния HTTP, чтобы установить соответствующий код ответа.
Этот подход позволяет вам как отладить проблему, так и предоставить более дружественный ответ пользователю, без раскрытия внутренней информации приложения.