На платформе, которую я разрабатываю, можно запросить данные компании пользователя, отправив запрос GET на конечную точку API api/company/{id}
.
По умолчанию параметр id
является целым числом, но обычно также можно установить его как строку: api/company/mine
будет извлекать данные компании, прошедшие аутентификацию.
Чтобы это разрешить, я создал промежуточное программное обеспечение, которое перехватывает вызов API и заменяет mine
фактический идентификатор компании. К сожалению, мое решение не совсем то, что я имел в виду.
Вот мое текущее решение:
$request->merge([
'id' => $request->user()->company
]);
Это работает путем добавления идентификатора к вводу запроса, чтобы к нему можно было получить доступ позже, используя $request->input('id');
, но проблема в том, что если я попытаюсь получить доступ к $request->route('id')
я все равно получаю старое значение.
Можно ли напрямую изменить параметр маршрута?
PS
Другое решение, которое приходит мне в голову, - это фактически программно создать новый запрос с новым параметром, а затем передать эту функцию next()
в промежуточном программном обеспечении.
Выяснилось, что лучшим решением в этом случае, по крайней мере для меня, было обращение к нему в запросе, переданном как параметр в действии контроллера и в репозитории модели.
Проблема с созданием нового запроса заключается в том, что он частично работает, поскольку параметры маршрута не обновляются, и невозможно обновить параметры маршрута вручную без большого количества дополнительного кода.
Другое возможное решение - перенаправить запрос в нужную конечную точку API или обработать его в контроллере.
Ударьте аналогичную проблему, и с некоторыми копаниями через форумы laracasts кто-то отметил альтернативу, которую я успешно использовал:
$request->route()->setParameter('id', $request->user()->company);
Ссылка (последнее сообщение): https://laracasts.com/discuss/channels/laravel/change-laravel-route-parameter