Метод collect
Метод collect класса Request применяется для преобразования
всех входных данных запроса (GET, POST, JSON) в объект коллекции
Illuminate\Support\Collection. Это позволяет использовать все
мощные методы работы с коллекциями, такие как filter, map,
pluck, sum и другие. Метод полезен, когда необходимо
выполнить сложные преобразования или фильтрацию данных запроса.
Первым параметром передаётся ключ элемента, вторым - значение по умолчанию.
Если ключ передан, возвращается коллекция значений по этому ключу.
Если ключ не указан, возвращается коллекция всех входных данных.
Синтаксис
<?php
$request->collect($key);
$request->collect($key, $default);
?>
Пример
Давайте получим все данные из запроса в виде коллекции:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function index(Request $request)
{
$res = $request->collect();
return $res;
}
}
?>
Результат выполнения кода при GET-запросе с параметрами ?name=John&age=30&city=New York:
[
"name" => "John",
"age" => "30",
"city" => "New York"
]
Пример
Давайте получим коллекцию вложенных данных по ключу 'user' из JSON-запроса:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
public function update(Request $request)
{
$res = $request->collect('user');
return $res;
}
}
?>
Результат выполнения кода при JSON-запросе с телом {"user":{"name":"John","email":"john@example.com"}}:
[
"name" => "John",
"email" => "john@example.com"
]
Пример
Давайте используем методы коллекции для обработки данных запроса:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class OrderController extends Controller
{
public function store(Request $request)
{
$res = $request->collect()
->filter(function ($value, $key) {
return !empty($value);
})
->map(function ($value, $key) {
return is_string($value) ? trim($value) : $value;
})
->toArray();
echo json_encode($res);
}
}
?>
Результат выполнения кода при отправке данных с пустыми значениями:
{"name":"John","email":"john@example.com","age":25}
Пример
Давайте получим коллекцию из вложенного массива с использованием значения по умолчанию:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SettingsController extends Controller
{
public function index(Request $request)
{
$res = $request->collect('preferences', []);
return $res;
}
}
?>
Результат выполнения кода при отсутствии ключа 'preferences' в запросе:
[]
Пример
Давайте используем метод collect для извлечения одного поля из всех элементов массива:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function index(Request $request)
{
$res = $request->collect('products')
->pluck('name')
->toArray();
echo json_encode($res);
}
}
?>
Результат выполнения кода при запросе с параметром products в виде массива объектов:
["Laptop","Phone","Tablet"]