我有一个尝试使用HTTP PUT将数据发送到我的网站的脚本。通常,我只需通过使用file_get_contents('php://input')
读取输入流来检索它。但是,当我尝试使用laravel时,我什么都没得到!为什么不?如何读取原始输入数据?
答案 0 :(得分:24)
Laravel拦截所有输入。如果您使用的是5.6之前的PHP,那么php://input
流只能读取一次。这意味着您需要从框架中获取数据。您可以通过访问getContent
实例上的Request
方法来执行此操作,如下所示:
$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
答案 1 :(得分:0)
您还可以使用Request::json($key, $default);
返回json有效内容中特定键的值。
答案 2 :(得分:0)
更新了最新的Laravel(我使用的是laravel 5.8),在使用Request::getContent();
时可能会遇到错误,因为最新的Symfony Request模块(位于Laravel的Request模块的基础)不再提供静态的getContent
方法。相反,我使用Request::createFromGlobals()->getContent();
。
参考:https://symfony.com/doc/current/components/http_foundation.html#accessing-request-data