Laravel-检查请求方法

jac*_*rln 0 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()];
}
Run Code Online (Sandbox Code Playgroud)

您知道我在哪里出问题了吗?提前致谢。

当请求返回时,它似乎总是跳过并返回 ['user.follows' => $user->follows->toArray()]

ale*_*tzo 5

该请求似乎不是 POST,因此if检查永远不会正确。您可以像这样回显方法名称:

$method = $request->method();

echo $method; 

// or var_dump($method);
Run Code Online (Sandbox Code Playgroud)


pat*_*cus 5

$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请求,但这超出了此问题的范围,并且可能比作为临时维护者所希望的更多。