【发布时间】:2014-03-26 08:38:48
【问题描述】:
我有一个脚本正在尝试使用 HTTP PUT 将数据发送到我的站点。通常,我会通过使用file_get_contents('php://input') 从输入流中读取来检索它。但是,当我尝试使用 Laravel 时,我什么也没得到!为什么不?如何读取原始输入数据?
【问题讨论】:
我有一个脚本正在尝试使用 HTTP PUT 将数据发送到我的站点。通常,我会通过使用file_get_contents('php://input') 从输入流中读取来检索它。但是,当我尝试使用 Laravel 时,我什么也没得到!为什么不?如何读取原始输入数据?
【问题讨论】:
Laravel 拦截所有输入。如果您使用 5.6 之前的 PHP,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
【讨论】:
Request::getContent();
$content = request()->getContent(); 也可以。
#method_getContent 根本不起作用。 #L1478 确实有效,但我不知道它有多稳定(或者它是否是预期的)。
您还可以使用Request::json($key, $default); 返回 JSON 有效负载中特定键的值。
【讨论】:
在使用 Request::getContent(); 时可能会遇到错误,因为最新的 Symfony Request 模块(它是 Laravel 的 Request 模块的基础)不再提供 getContent 作为静态方法。相反,我使用Request::createFromGlobals()->getContent();。
【讨论】: