Передача параметров в коллекции ресурсов Laravel с примерами кода

Чтобы передать параметр в коллекцию ресурсов Laravel, вы можете использовать замыкание или функцию обратного вызова. Вот несколько методов, которые вы можете использовать, а также примеры кода:

Метод 1: использование метода map

use App\Http\Resources\YourResourceCollection;
$parameter = 'example';
$collection = YourModel::all();
$resourceCollection = YourResourceCollection::collection($collection)->map(function ($item) use ($parameter) {
    return $item->toArray($parameter);
});

В приведенном выше примере метод mapиспользуется для перебора каждого элемента коллекции и применения преобразования. Переменная $parameterпередается в метод toArrayкаждого элемента ресурса.

Метод 2: использование метода each

use App\Http\Resources\YourResourceCollection;
$parameter = 'example';
$collection = YourModel::all();
$resourceCollection = YourResourceCollection::collection($collection);
$resourceCollection->each(function ($item) use ($parameter) {
    $item->setAdditionalData($parameter);
});

В этом примере метод eachиспользуется для перебора каждого элемента в коллекции ресурсов. Переменная $parameterпередается в метод setAdditionalDataкаждого элемента ресурса.

Метод 3: использование метода with

use App\Http\Resources\YourResourceCollection;
$parameter = 'example';
$collection = YourModel::all();
$resourceCollection = YourResourceCollection::collection($collection)->with(['parameter' => $parameter]);

В этом примере метод withиспользуется для добавления дополнительных данных в коллекцию ресурсов. Переменная $parameterпередается как массив в метод with.

Метод 4. Использование собственного конструктора

use Illuminate\Http\Resources\Json\ResourceCollection;
class YourResourceCollection extends ResourceCollection
{
    protected $parameter;
    public function __construct($resource, $parameter)
    {
        parent::__construct($resource);
        $this->parameter = $parameter;
    }
    public function toArray($request)
    {
        return [
            'data' => $this->collection->map(function ($item) {
                return $item->toArray($this->parameter);
            }),
        ];
    }
}
$parameter = 'example';
$collection = YourModel::all();
$resourceCollection = new YourResourceCollection($collection, $parameter);

В этом примере специальный конструктор используется для передачи переменной $parameterв коллекцию ресурсов. Переменная $parameterсохраняется в защищенном свойстве, а затем используется в методе toArray.