先说结论,一定要注意GET请求用Url Params,POST请求用Body,不要自作聪明在GET请求的Body中塞入参
laravel的Http/Request.php input()? 对于GET请求的入参只看Url Params
抛出问题
进入正题,同事A利用guzzle包写了这样的一个请求方法
?sendGetRequest()方法中$query为url带参? $params为Body带参
同事B调用上面的这个方法
sendGetRequest('http://mydomain.com/myroute', [], ['keyA'=>'valueA'])
并且在http://mydomain.com/myroute对$request->input('keyA')打日志,但惊奇的发现路由到达了但keyA没有记录在日志里。
代码溯源
这是为什么呢?
以下是笔者的trace
首先看到vendor/laravel/framework/src/Illuminate/Http/Request.php的input()方法
?很朴素的2行代码,看不出问题,往下深追。
看到$this->getInputSource()
?可以看到? 如果请求方式为GET则取url带参,否则取Body带参
看回input()方法, 将getInputInstance的返回值套入其中,此时也就等同于下述代码
public function input($key = null, $default = null)
{
$input = $this->query->all() + $this->query->all();
return data_get($input, $key, $default);
}
所以此时$input = $this->query->all(),也就是说只有url带参被取出来了,Body带参被略过了!!!
|