Чтобы передать параметр в коллекцию ресурсов 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.