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