Метод throw
Метод throw применяется к объекту ответа, полученному от HTTP-клиента Laravel, и позволяет сразу сгенерировать исключение, если запрос завершился неудачей (код статуса 400 и выше). Это избавляет от необходимости вручную проверять статус ответа в каждом запросе. Метод не принимает параметров и возвращает тот же объект ответа, если статус успешный, либо выбрасывает исключение Illuminate\Http\Client\RequestException.
Синтаксис
<?php
$response = Http::get($url)->throw();
?>
Пример
Выполним GET-запрос к внешнему API и применим метод throw. Если сервер вернёт ошибку, будет выброшено исключение:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
use Illuminate\Http\Request;
class ApiController extends Controller
{
public function index()
{
try {
$response = Http::get('https://api.example.com/users')
->throw();
$users = $response->json();
foreach ($users as $user) {
echo $user['name'];
}
} catch (\Exception $e) {
echo "Error: " . $e->getMessage();
}
}
}
?>
Результат выполнения кода при успешном ответе:
["John Doe", "Jane Smith", "Bob Johnson"]
Результат выполнения кода при ошибке (например, сервер вернул 404):
"Error: HTTP request returned status code 404"
Пример
Метод throw можно использовать в цепочке с другими методами, такими как json или body. Это позволяет сразу получить обработанные данные без дополнительных проверок:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
class DataController extends Controller
{
public function getData()
{
$data = Http::post('https://api.example.com/data', [
'id' => 1,
'type' => 'user'
])
->throw()
->json();
foreach ($data['items'] as $item) {
echo $item['name'];
}
}
}
?>
Результат выполнения кода:
["item 1", "item 2", "item 3", "item 4", "item 5"]
Пример
Метод throw можно настроить для выброса исключения только при определённых кодах ошибок с помощью дополнительных параметров. В примере обработаем ответ с кодом 403 как перенаправление на другую страницу:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
use Illuminate\Http\Request;
class AuthController extends Controller
{
public function login(Request $request)
{
try {
$response = Http::asForm()->post('https://api.example.com/login', [
'email' => $request->email,
'password' => $request->password
])->throw();
$token = $response->json('token');
echo "Login successful. Token: " . $token;
} catch (\Illuminate\Http\Client\RequestException $e) {
if ($e->getCode() === 403) {
echo "Access forbidden. Redirecting to login page.";
} else {
echo "Error: " . $e->getMessage();
}
}
}
}
?>
Результат выполнения кода при успешном входе:
"Login successful. Token: abcdef123456"
Результат выполнения кода при ошибке 403:
"Access forbidden. Redirecting to login page."
Смотрите также
-
метод
successful,
который проверяет, был ли ответ успешным (код 200-299) -
метод
failed,
который проверяет, был ли ответ неудачным (код 400-599) -
метод
status,
который возвращает код статуса HTTP-ответа -
метод
json,
который преобразует ответ в массив или объект