Laravel - 检查请求方法

时间:2017-04-21 20:07:06

标签: php laravel

我是应用程序中的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()]

2 个答案:

答案 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);
相关问题