处理 Laravel 中的 text/plain 请求(通过 navigator.sendBeacon 发送)

Handling text/plain request in Laravel (sent via navigator.sendBeacon)

问题:

我正在尝试从 text/plain POST 请求中获取 内容 / body ControllerLaravel 8.

文档或多次 google 搜索均无效。

我试过:

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

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

上下文

这可能与解决方案无关,但可能会帮助其他正在尝试 google 这个问题的人:我试图用我的控制器处理的请求是由 navigator.sendBeacon 发送的客户端。请求 body 实际上是字符串化的 JSON,但是 sendBeacon 不允许您发送带有 content-type JSON 的请求。 Devtools 将此请求的 content-type header 显示为 'text/plain'.

我的回答:

使用 $request->getContent() 获取 text/plain HTTP 请求的内容。

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

事实证明这很简单,但是文档中或任何在线搜索中都没有这些信息,所以我认为 post 无论如何都是值得的。 .

您可以像这样 JSON 发送数据

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

navigator.sendBeacon('/your/route/here', data)