POST form-data nebo raw JSON

Damo
Člen | 54
+
0
-

Rád bych přijímal v presenteru oba způsoby a dále s nimi pracoval a pak vyčítal přes getPost.
Jak dostat raw Json do POST aby se s tím mohlo pracovat jako s POST daty?

tedy poslane jako form-data

$request = $this->getHttpRequest();
$name = $request->getPost("name")

a poslané jako raw json

$request = $this->getHttpRequest();
$headers = $request->getHeaders();
if ($headers["content-type"] === "application/json") {
    // zde naplnit post, aby další kód, který pracuje s getPost dostal data odeslane jako raw json
    // setPost neexistuje, takže jen příklad
	// $request->setPost = json_decode($request->getRawBody());
}
$name = $request->getPost("name")
Marek Bartoš
Nette Blogger | 1167
+
+1
-

Předpokládat, že když není v body form-data, tak tam bude json je špatně. Ta data do POST prostě nepatří.

dakur
Člen | 493
+
0
-

@Damo Jak píše Marek, ta logika je chybná, je to ohýbání POST (resp. form-data) k uchovávání dat v aplikaci. Lepší je mít jinou strukturu, do které se to přelije ať už z JSON či z form-data a tu pak dále v aplikaci používat. Tedy:

  • JSON endpoint → DTO → aplikace/model
  • form-data endpoint → DTO → aplikace/model

Nemusí to být ani objekt, klidně jen array či cokoliv, záleží na tvém use-case. Stejně tak to nemusí být dva endpointy, ale jen jeden, to už je otázkou implementace.

Editoval dakur (27. 1. 2022 10:40)