Laravel $ request-> all()正确返回数据,但$ _POST完全为空

时间:2017-10-08 18:02:27

标签: laravel post

我正在向服务器发送ajax post请求,发布json数据。在firebug中,我可以看到网络发布呼叫以及json数据。

在Laravel中,我试图对$_POST数据执行简单的var转储,并且浪费了相当多的时间来混淆为什么这应该是完全空的。但是,当我使用Request facade时,我的数据就在那里。

即。这只是给我一个空数组:

public function test(){
    Log::info($_POST);
}

......然而,正如我所料,这会打印我的数据:

public function test(Request $request){
    Log::info($request->all());
}

为什么?

修改

谢谢,@ Webdesigner。 http动词肯定是post,因为我的路径文件中通过

调用了我的方法

Route::post('/image-upload', 'EntryController@test'); // Note "post" verb

我不认为$request->post()在Laravel 5.4中有效,因为这会引发BadMethodCallException: Method post does not exist.错误。但是,我可以确认

Log::info($request->method()); // POST

还告诉我该方法已发布。

很奇怪。我猜你是对的,应用程序的某些部分会覆盖$ _POST全局,但我不知道为什么/在哪里/如何。可能不相关,但这个电话是从Angular 4发出的。

无论如何,谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这不是Laravel的正常行为。我在一个新的Laravel 5.5站点上对此进行了测试,只是在同一条路线上进行了表单提交和Ajax POST请求。

两者都给我相同的结果。 POST请求至少应具有_token的CSRF令牌,其值为。

另外一点$request->all()不仅仅是$_POST的内容,因此您应该尝试$request->post()进行公平的压缩。

BTW只是因为你做了一个POST请求并不意味着数据是由POST方法发送的,可能是你在$request->all()中看到的数据来自$ _GET和$ _COOKIE等,而且只有方法是一个POST。

最后但并非最不重要的是,您的APP的某些部分正在删除超全局变量的内容。 $_POST和其他的不是常量,因此可以在运行时更改它们,例如$_POST = [];

我不喜欢Laravel 5.4.27中存在差异。