在我正在开发的平台中,可以通过向api/company/{id}API 端点发送 GET 请求来请求用户的公司数据。
默认情况下,id参数是一个整数,但通常也可以将其设置为字符串:api/company/mine将检索经过身份验证的用户的公司数据。
为了实现这一点,我创建了一个中间件来拦截 API 调用并替换mine为实际的公司 ID。不幸的是,我的解决方案并不完全符合我的想法。
这是我目前的解决方案:
$request->merge([
'id' => $request->user()->company
]);
Run Code Online (Sandbox Code Playgroud)
这是通过将 id 添加到请求的输入中来实现的,以便以后可以使用 访问它$request->input('id');,但问题是,如果我尝试访问,$request->route('id')我仍然会得到旧值。
是否可以直接更改路由参数?
聚苯乙烯
我想到的另一个解决方案是实际以编程方式使用新参数创建一个新请求,然后将该请求传递给next()中间件中的函数。
遇到了类似的问题,并通过 laracasts 论坛进行了一些挖掘,有人记下了我已成功使用的替代方案:
$request->route()->setParameter('id', $request->user()->company);
Run Code Online (Sandbox Code Playgroud)
参考(上一篇):https : //laracasts.com/discuss/channels/laravel/change-laravel-route-parameter
发现在这种情况下最好的解决方案,至少对我来说,是在控制器操作和模型存储库中作为参数传递的请求中处理它。
创建新请求的问题在于,它只是部分工作,因为路由参数未更新,并且在没有大量附加代码的情况下不可能手动更新路由参数。
另一种可能的解决方案是将请求重定向到正确的 API 端点或在控制器中处理它。