Při routování POST dat o ně přijdu

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

Zdravím,
mám tento problém: Snažím se odeslat POST data do skriptu, který je zpracuje. Data vygeneruji v HomepagePresenteru a odešlu je do ImportPresenteru. V ImportPresenteru se však nepřijmou.

Pokud data odešlu do jiného testovacího skriptu, vypíší se, čili odesílání funguje (var. b).
Pokud data odešlu na adresu, které se pomocí routeru přeloží na Presenter a Action, tak v tom presenteru již žádná data v $_POST nejsou (var. a).

Víte někdo, co dělám špatně?

router:

$router[] = new Route("import/di", "Import:importBrokenSegments");

HomepagePresenter:

public function actionTest() {
  $data = "mojedata";
  /* var. a) */ $request = new \Kdyby\Curl\Request("http://10.0.0.22/test/import/di");
  /* var. b) */ $request = new \Kdyby\Curl\Request("http://10.0.0.22/test/index.php");
  $response = $request->post(array($data));

  $this->flashMessage($response->getCode(), "info");
  $this->flashMessage($response->getResponse(), "info");
  $this->redirect("default");
}

index.php:

var_dump($_POST, true);

ImportPresenter:

public function actionImportBrokenSegments() {
  print var_export($_POST, true);
  $this->presenter->terminate();
}
Filip Klimeš
Nette Blogger | 156
+
0
-
  1. zkusil bych requesty dělat nějak takhle
new \Kdyby\Curl\Request($this->link("//Import:importBrokenSegments"));
  1. Pochopil jsem správně, že posíláš POST requesty z jednoho presenteru v aplikaci na druhý? Nešlo by to vyřešit inteligentněji, např. přesunout celou logiku importu do nějaké Service, tu si předat do HomepagePresenteru, a pak pouze zavolat příslušnou metodu? Bude to určitě rychlejší a čistší řešení.
roman.campula
Člen | 60
+
0
-

Předávání dat mezi dvěma presentery je jen zkušební záležitost. Ve skutečnosti POST data přitečou úplně z jiného serveru. Mě jde jen o příjem a zpracování. V uvedeném příkladu si odesílání dat simuluji místo z jiného serveru, tak z mé aplikace.

Předpokládám, že odesílání dat je v pořádku (protože se ve zkušebním index.php přijmou). Zde se však přijímají přímo, ale v mé aplikaci pomocí Nette Frameworku. A tam tuším nějaký problém.

Ve skutečnosti možná nepotřebuji strukturu jako mám já (ImportPresenter, ActionImportBrokenSegments apod.), ale nevěděl jsem, jak jinak zabezpečit zpracování POST dat, která přijdou na nějakou adresu na mém webu.

Filip Klimeš
Nette Blogger | 156
+
0
-

Okay, a když pošleš request pomocí curl z příkazové řádky, tak tam data jsou?
Zkus ještě k datům přistupovat pomocí

$this->getHttpRequest()->getPost();
roman.campula
Člen | 60
+
0
-

Pomocí curl z příkazové řádky jsem zjistil, že tam data skutečně jsou, jen se asi v aplikaci nezobrazí. Následně jsem objevil, že to blokuje něco v .htaccess. Nyní se to jakousi záhadnou úpravou opravilo.

Díky za nakopnutí.