在Laravel中处理文本/纯文本请求(通过navigator.sendBeacon发送)



问题:

我正试图从Laravel 8中的控制器text/plain POST请求获取内容/body

文档或大量谷歌搜索都没有奏效。

我尝试过:

$request->input();
$request->all();
$request->json();
json_encode($request);

所有这些似乎都表明请求是完全空的。

上下文

这可能与解决方案无关,但可能有助于其他试图在谷歌上搜索此问题的人:我试图用控制器处理的请求是由客户端的navigator.sedBeacon发送的。请求主体实际上是字符串化的JSON,但sendBeacon不允许您发送内容类型为JSON的请求。Devtools将此请求的内容类型标头显示为"text/plain"。

我的答案:

使用$request->getContent()获取文本/纯HTTP请求的内容

然后,如果您处于像我这样的情况,文本实际上是JSON,请使用json_decode($request->getContent(),true)从内容中获得一个标准的PHP数组,您可以在控制器中使用该数组。

结果很简单,但文档中或任何在线搜索中都没有信息,所以我认为无论如何都值得发布到so

您可以像这样将数据发送为JSON,而不是

data = new Blob([JSON.stringify(data)], {type : 'application/json'})
navigator.sendBeacon('/your/route/here', data)

最新更新