我是应用程序中的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()];
}
你知道我在哪里出错吗?提前谢谢。
当请求被返回时,它似乎总是跳过并返回['user.follows' => $user->follows->toArray()]
答案 0 :(得分:5)
$request
应该是Illuminate\Http\Request
的一个实例。这个类扩展了Symfony的请求(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];
}
更合适的是,您应该定义单独的控制器操作来处理POST
vs GET
请求,但这超出了本问题的范围,并且可能超出您想要作为临时维护者的范围。
答案 1 :(得分:1)
似乎请求不是POST,因此if
检查永远不会成立。您可以像这样回显方法名称:
$method = $request->method();
echo $method;
// or var_dump($method);