Метод object
Метод object применяется к объекту ответа, возвращаемому HTTP-клиентом Laravel. Он позволяет преобразовать тело ответа в объект stdClass, что удобно при работе с JSON-данными. Метод не принимает параметров и возвращает объект. Если тело ответа не является валидным JSON, метод выбросит исключение.
Синтаксис
<?php
$res = Http::get($url)->object();
?>
Пример
Получим данные пользователя из внешнего API и преобразуем их в объект:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesHttp;
use IlluminateHttpClientRequestException;
class UserController extends Controller
{
public function getUserData()
{
try {
$response = Http::get('https://api.example.com/users/1');
$user = $response->object();
echo $user->name;
echo $user->email;
} catch (RequestException $e) {
echo "Error: " . $e->getMessage();
}
}
}
?>
Результат выполнения кода:
"John Doe"
"john@example.com"
Пример
Обработаем вложенные данные, полученные в виде объекта:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesHttp;
use IlluminateHttpClientRequestException;
class PostController extends Controller
{
public function showPosts()
{
try {
$response = Http::get('https://api.example.com/posts');
$posts = $response->object();
foreach ($posts as $post) {
echo $post->title;
echo $post->body;
echo $post->user->name;
}
} catch (RequestException $e) {
echo "Error: " . $e->getMessage();
}
}
}
?>
Результат выполнения кода:
"Post 1"
"Body of post 1"
"User 1"
"Post 2"
"Body of post 2"
"User 2"
Пример
Обратите внимание, что метод object вернет массив объектов для списка данных:
<?php
namespace AppHttpControllers;
use IlluminateSupportFacadesHttp;
use IlluminateHttpClientRequestException;
class DataController extends Controller
{
public function getData()
{
try {
$response = Http::get('https://api.example.com/items');
$items = $response->object();
if (is_array($items)) {
echo "Count: " . count($items);
}
} catch (RequestException $e) {
echo "Error: " . $e->getMessage();
}
}
}
?>
Результат выполнения кода:
"Count: 5"