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

Posted

技术标签:

【中文标题】如何在 Laravel 中获取原始表单数据?【英文标题】:How do I get raw form data in Laravel? 【发布时间】:2014-03-26 08:38:48 【问题描述】:

我有一个脚本正在尝试使用 HTTP PUT 将数据发送到我的站点。通常,我会通过使用file_get_contents('php://input') 从输入流中读取来检索它。但是,当我尝试使用 Laravel 时,我什么也没得到!为什么不?如何读取原始输入数据?

【问题讨论】:

【参考方案1】:

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(); 我正在尝试将 XML 发送到 Laravel 并使用此功能,但它不起作用。 非常感谢。 $content = request()->getContent(); 也可以。 链接断了一半。它重定向到 GitHub 并且锚点 #method_getContent 根本不起作用。 #L1478 确实有效,但我不知道它有多稳定(或者它是否是预期的)。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

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

参考:Accessing Request Data

【讨论】:

这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker.

以上是关于如何在 Laravel 中获取原始表单数据?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 Eloquent:如何获取正在执行的原始 sql? (带有绑定数据)

在执行查询之前,如何从 Laravel 的查询构建器中获取原始查询字符串?

如何在多选表单 laravel 中选择所有选项?

如何从数据库中获取图像并在 laravel 中使用 ajax 以编辑形式预览它?

laravel 5.1 表单验证如何验证数组里面的

如何在执行查询之前从Laravel的查询生成器获取原始查询字符串?