Метод collect
Метод collect применяется к объекту ответа, полученному
от HTTP-клиента Laravel. Он декодирует JSON-тело ответа
и возвращает экземпляр коллекции Illuminate\Support\Collection.
Это позволяет использовать все методы коллекций для работы
с данными, полученными из API. Если тело ответа не является
валидным JSON, метод вернет пустую коллекцию.
Синтаксис
<?php
$response->collect();
?>
Пример
Давайте отправим GET-запрос к API, который возвращает список пользователей, и преобразуем ответ в коллекцию:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
class UserController extends Controller
{
public function index()
{
$response = Http::get('https://api.example.com/users');
$users = $response->collect();
foreach ($users as $user) {
echo $user['name'] . "\n";
}
}
}
?>
Результат выполнения кода:
"John Doe"
"Jane Smith"
"Mike Johnson"
Пример
Давайте получим данные о постах и отфильтруем только те, которые опубликованы, используя методы коллекции:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
class PostController extends Controller
{
public function index()
{
$response = Http::get('https://api.example.com/posts');
$posts = $response->collect();
$publishedPosts = $posts->filter(function ($post) {
return $post['status'] === 'published';
});
foreach ($publishedPosts as $post) {
echo $post['title'] . "\n";
}
}
}
?>
Результат выполнения кода:
"First Post"
"Second Post"
"Third Post"
Пример
Метод collect также можно использовать для преобразования данных из API в коллекцию и дальнейшего извлечения отдельных значений:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
class ApiController extends Controller
{
public function show()
{
$response = Http::get('https://api.example.com/data');
$data = $response->collect();
$names = $data->pluck('name');
$firstUser = $data->first();
echo "All names: " . implode(', ', $names->toArray()) . "\n";
echo "First user: " . $firstUser['name'] . "\n";
}
}
?>
Результат выполнения кода:
"All names: John, Jane, Mike"
"First user: John"