Как передать дополнительные параметры в Laravel Resource?

Для передачи дополнительных параметров в Laravel Resource вы можете использовать второй аргумент функции toArray() или toResponse() в вашем классе ресурса.

В Laravel Resource есть методы toArray() и toResponse(), которые используются для преобразования модели или коллекции моделей в массив JSON или HTTP-ответ соответственно. Оба этих метода принимают один аргумент - экземпляр запроса (Request).

Однако, если вам нужно передать дополнительные параметры вместе с запросом, вы можете воспользоваться вторым аргументом функции, который представляет собой массив дополнительных параметров.

Пример кода:

use IlluminateHttpResourcesJsonJsonResource;

class MyResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'extra' => $request->extraParam, // получение дополнительного параметра
        ];
    }
}

После определения класса ресурса вам нужно использовать его для сериализации модели или коллекции моделей. Для этого используйте метод response() или collection() класса Resource.

Пример использования:

use AppHttpResourcesMyResource;
use AppModelsMyModel;

class MyController extends Controller
{
    public function index()
    {
        $extraParam = 'Some extra param'; // дополнительный параметр

        $models = MyModel::all();

        return MyResource::collection($models)->response()->setRequest($request, $extraParam);
    }

    public function show($id)
    {
        $extraParam = 'Some extra param'; // дополнительный параметр

        $model = MyModel::find($id);

        return (new MyResource($model))->response()->setRequest($request, $extraParam);
    }
}

В примерах выше мы определяем дополнительный параметр $extraParam и передаем его в методы response()->setRequest() перед вызовом метода toArray() в классе ресурса. Таким образом, в классе ресурса вы можете получить доступ к этому дополнительному параметру через экземпляр запроса ($request->extraParam) и использовать его в методе toArray() для добавления его в сериализованный массив данных ресурса.

Обратите внимание, что в примере я использовал JsonResource класс, но вы можете использовать любой другой тип ресурса в зависимости от ваших потребностей.