我是某个应用程序的iOS负责人,并试图在我们的开发人员“不可用”时修复一些API错误。我几乎是Laravel的新手,正在尝试检查请求方法是什么。我遵循了另一个问题的一些指导,但是无法使其正常工作:
public function defaults(Request $request, User $user){
$follow_ids = explode(',', env('FOLLOW_DEFAULTS'));
if ($request->isMethod('post')) {
return ['user' => $user];
}
$user->follows()->syncWithoutDetaching($follow_ids);
return ['user.follows' => $user->follows->toArray()];
}
Run Code Online (Sandbox Code Playgroud)
您知道我在哪里出问题了吗?提前致谢。
当请求返回时,它似乎总是跳过并返回 ['user.follows' => $user->follows->toArray()]
该请求似乎不是 POST,因此if检查永远不会正确。您可以像这样回显方法名称:
$method = $request->method();
echo $method;
// or var_dump($method);
Run Code Online (Sandbox Code Playgroud)
$request应该是的实例Illuminate\Http\Request。此类扩展了Symfony的request(Symfony\Component\HttpFoundation\Request),实际上是isMethod()定义方法的。
基本上,给定的函数定义已发布,它显示为“如果这是一个POST请求,则仅返回用户数据。如果这不是POST请求(例如,GET),则更新并返回关系数据。”
因此,如果您发送POST请求,您将得到['user' => $user]响应。如果您发送任何其他请求方法(例如GET),则将修改follows关系并获得['user.follows' => $user->follows->toArray()]响应。
对我来说,这似乎是倒退。我认为您希望该POST请求更新数据,而其他任何请求(例如GET)仅返回数据。
如果正确,则需要取消isMethod检查:
if (! $request->isMethod('post')) {
return ['user' => $user];
}
Run Code Online (Sandbox Code Playgroud)
更恰当的是,您应该定义单独的控制器操作来处理POSTvs GET请求,但这超出了此问题的范围,并且可能比作为临时维护者所希望的更多。
| 归档时间: |
|
| 查看次数: |
11341 次 |
| 最近记录: |