在Laravel中如何获取原始表单数据?

19

我有一个脚本,试图使用HTTP PUT向我的网站发送数据。通常情况下,我只需使用file_get_contents('php://input')从输入流中读取即可。然而,当我在Laravel中尝试这样做时,我什么也没得到!为什么?我该如何读取原始输入数据?

3个回答

40

Laravel会拦截所有的输入。如果你使用的是 PHP 5.6 之前的版本,php://input 流只能读取一次。这意味着你需要从框架中获取数据。你可以通过访问 Request 实例上的 getContent 方法来实现,就像这样:

$content = Request::getContent(); // Using Request facade
     /* or */ 
$content = $request->getContent(); // If you already have a Request instance
                                   // lying around, from say the controller  

由于Illuminate\Request继承了Symfony\Component\HttpFoundation\Request,并且getContent在这里定义:http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/Request.html#method_getContent


4
理论上来说,你不需要获取实例,而是可以直接使用门面:Request::getContent(); - alexrussell
我正在尝试将一个XML发送到Laravel,并使用了这个函数,但它没有起作用。 - Player1
非常感谢。$content = request()->getContent();也可以工作。 - refik
链接有点问题。它会重定向到GitHub,而锚点“#method_getContent”根本不起作用。#L1478可以使用,但我不知道它有多稳定(或者是否是预期的)。 - Peter Mortensen

1
你还可以使用Request::json($key, $default);来返回JSON有效负载中特定键的值。

1

更新到最新的Laravel(我使用的是Laravel 5.8)

当您使用Request::getContent();时,您可能会遇到错误,因为最新的Symfony Request模块(作为Laravel的Request模块的基础)不再提供getContent作为静态方法。相反,我使用Request::createFromGlobals()->getContent();

参考:访问请求数据


1
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案 - Matthew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接