Angular $http.post nefunguje jak má

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
emmil
Člen | 26
+
0
-

Pokouším se zpracovat $http.post požadavek v presenteru, presenter ale nepříjmá post data, které jsou poslané pomocí angular $http.post.

<script>

var myData = { 'param1' : 'value' }

$http.post('?do=myMethod', myData).then(function(response) {
  console.log(response)
}, function(error) {
  console.error(error)
})

</script>

And presenter:

<?php

public function handleMyMethod()
{
	// Set post params
	$post = $this->httpRequest->getPost();

	// Try to send the params back
	$this->sendResponse( new Nette\Application\Responses\JsonResponse( $post, "application/json;charset=utf-8" ) );

	$this->terminate();
}

?>

Vrací to prázdné pole.

Editoval emmil (27. 1. 2016 11:22)

Šaman
Člen | 2659
+
0
-

A proč posíláš stejnou otázku do české i do anglické části fóra?

emmil
Člen | 26
+
0
-

Aby to bylo jak pro české, tak pro zahraniční publikum. Ne proto, abych dostal více odpovědí :)

Pavel Kravčík
Člen | 1195
+
0
-

Myslím si, že je ten příspěvek diskriminační. Zapomněl na slovenské publikum a to máme takový krásný tester. :(

Jinak zkoušel si ->getRawBody() nebo $_POST?

emmil
Člen | 26
+
0
-

Za slovenské publikum se omlouvám, příště raději dám jeden jazyk :) Na základě tvé rady jsem $_POST zkusil, ale taky nic nevrátil. Zajímavé je, že třeba $http.get() a getQuery() funguje.

Zkusil jsem ->getRawBody() a vrátilo mi to string, který opravdu obsahoval data. Takže jsem udělal následující, což už funguje:

<?php

public function handleMyMethod()
{
    // Set post params
    $post = $this->httpRequest->getRawBody();

	$post = json_decode($post);

    // Try to send the params back
    $this->sendResponse( new Nette\Application\Responses\JsonResponse( $post, "application/json;charset=utf-8" ) );

    $this->terminate();
}

?>

Asi to bude tím ContentTypem, jak navrhuje @iguana007 v mém anglickém postu. Ještě ten ContentType vyzkouším.

Vidím, že dávat příspěvky ve dvou jazycích nebyl úplně dobrý nápad, chtělo by to mít na foru možnost, kde můžeš jedním příspěvkem napsat v podstatě dva, ve dvou jazycích, a tím každý příspěvek zpřístupnit i v angličtině.

newPOPE
Člen | 648
+
0
-

Problem bude zrejme v tom ze to posiela RAW POST cize sa z toho neda zkonstruovat pole v PHP. Na to sa pouziva nieco taketo:

$content = file_get_contents('php://input');

alebo pouzi RestRoute a je vyriesene :)

Editoval newPOPE (27. 1. 2016 14:04)

emmil
Člen | 26
+
0
-

Díky za odkaz na RestRoute, už jsem myslím na něco při svém hledání narazil, ale nechtělo se mi to nastavovat kvůli jednomu POSTu :) Kdybych stavěl celé API, tak RestRoute je určitě řešení.

emmil
Člen | 26
+
0
-

@newPOPE Ještě bych se rád zeptal na něco ohledně RestRoute. Možná je to úplně blbý dotaz, ale nemáš v to v README na githubu. Jak se vlastně napíše takový vnitřek action metody v presenteru, která má přečíst nějaké data poslané přes POST request? Máš tam hezky popsané, že params jsou třeba:

format = json
associations = array(0)
data = {„foo“: „bar“, „nested“: {„foo“: „bar“}}
query = array(0)

ale není tam napsané, jak se k těm params dostanu přímo v action metodě. Mohl by si tuto maličkost objasnit? Díky moc.

Editoval emmil (31. 1. 2016 21:17)

newPOPE
Člen | 648
+
+1
-

@emmil sorry za delay som to prehliadol.

Tu je priklad POST requestu. Params su predane do action metody cize to funguje nejak takto:

public function actionCreate($format, $data) {
  // tu su $data naplnene tym co je v popisane v params...
}

Funguje to tak, ze co si vymenujes s tych params v metode to tam bude predane.

emmil
Člen | 26
+
0
-

Díky moc, vyzkouším.