Sheldonfrith
Sheldonfrith

Reputation: 3285

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

Problem:

I am trying to get the content / body from a text/plain POST request in a Controller in Laravel 8.

Nothing in the docs or numerous google searches worked.

I have tried:

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

All of these seem to show that the request is completely empty.

Context

This may not be relevant to the solution, but might help other's who are trying to google this problem: The request I am trying to handle with my controller is being sent by navigator.sendBeacon on the client side. The request body is actually stringified JSON, but sendBeacon does not allow you to send requests with content-type JSON. Devtools show the content-type header for this request as 'text/plain'.

Upvotes: 5

Views: 2699

Answers (2)

jjjrmy
jjjrmy

Reputation: 1

You can send the data as JSON like this instead

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

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

Upvotes: 0

Sheldonfrith
Sheldonfrith

Reputation: 3285

My Answer:

Use $request->getContent() to get the content of a text/plain HTTP request.

And then, if you are in a situation like mine where the text is actually JSON, use json_decode($request->getContent(),true) to get a standard PHP array from the content which you can use in your Controller.

It turned out to be quite simple, but the information was not in the docs, or in any online searches so I thought it would be worthwhile to post to SO anyways...

Upvotes: 10

Related Questions