2017-04-21 75 views
0

我是一名iOS应用程序领导者,尝试解决一些API错误,同时我们的开发人员“不可用”。我对Laravel几乎是全新的,并试图检查请求方法是什么。我遵循另一个问题的一些指导,但一直无法得到它的工作: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()]

回答

3

$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请求,但就是这个问题的范围之内,可能比你想要成为临时维护者更多。

+0

谢谢你的非常全面的答案。正如我所说,我是一个总是新手laravel,事实证明我正在看错误的功能(oops)。尽管感谢您的帮助! –

+1

@JackChamberlain一点问题都没有。乐于帮助。在Laravel中可能有很多“魔力”,所以有时候很难弄清楚发生了什么,除非你在框架中花了一点时间。试图调试现有应用程序的新手可能很复杂。 :) – patricus

1

看来这个请求不是POST所以if检查是不正确的。你可以呼应方法名是这样的:

$method = $request->method(); 

echo $method; 

// or var_dump($method);