sendResponse z komponenty

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

Ahoj,
mozna to bude hloupy dotaz, ale co musim v komponente udelat, abych mohl pouzivat fci sendResponse? Respektive JsonResponse? Snazim se vratit z handle metody neco v JSONu, protoze to volam AJAXem a dostavam chybu Fatal error: Class 'FrontModule\DemoModule\JsonResponse' not found. Moje fce vypada nejak takhle:

<?php
function handleLoad()
    {
            $this->loadSession();
            $this->sendResponse(new JsonResponse(array('x'=>$this->session->x, 'y'=>$this->session->y)));
    }
?>

Snazil jsem se pred polozenim dotazu neco aktivne najit. Procetl jsem v dokumentaci texty o AJAXu v Nette, o psani komponent atd a podle vseho by mi to melo jet. Nasel jsem i cast, ktera se zabyva payloadem, payload mi hlasi to same, co JsonResponse, tedy ze propertu payload to nezna.

Asi nejbliz co jsem na foru nasel je tenhle topik → https://forum.nette.org/…son-response ale i kdyz jsem zkusil co je v nem, stale se mi nedari dostat pres tu osklivou cervenou stranku s FATAL ERROR nahore :)

Co delam spatne? Unika mi nejaky detail, ale nemuzu ho najit :(

22
Člen | 1478
+
0
-

píše to, že ta třída v tom namespace neexistuje:
Fatal error: Class 'FrontModule\DemoModule\JsonResponse' not found

budeš ji muset asi hledat jinde, buď doplň správný use anebo použij správný namespace:

new Nette\Application\Responses\JsonResponse();

Editoval 22 (7. 7. 2011 14:35)

Pirozek
Člen | 11
+
0
-

Jo, to me napadlo, jenze i kdyz tam doplnim use Nette\Application\Responses;, tak porad rve jak zavalenej hornik, ze to JsonResponse nezna. Tak jsem ho zkusil vytvorit takhle new \Nette\Application\Responses\JsonResponse(array('x'=>$this->session->x, 'y'=>$this->session->y)). To uz sice nerve jak zavalenej hornik, ale porad tvrdi, ze nezna sendResponse.

Co na tom delam spatne nebo nechapu?

22
Člen | 1478
+
0
-

nechápeš namespace, podivej se do API, pod jakým namespace je sendResponse()

Pirozek
Člen | 11
+
0
-

To jsem si nasel tady https://api.nette.org/…tion.UI.html, je to namespace Nette\Application\UI, takze pokud napisu do zdrojaku use Nette\Application\UI;, mel bych byt schopen tu fci pouzit. Nejde. Tak jsem zkusil primo \Nette\Application\UI\sendResponse(new \Nette\Application\Responses\JsonResponse(array('x'=>$this->session->x, 'y'=>$this->session->y)));. Taky ne. Ackoliv ta funkce tam prokazatelne je. Stale to ale tvrdi Call to undefined function Nette\Application\UI\sendResponse().

Nebude to nejakej problem v tom, ze je to v te komponente?

22
Člen | 1478
+
0
-

v Nette\Application\UI žádná taková metoda není.. Call to undefined function Nette\Application\UI\sendResponse().

Zkus hledat dál, už jsi blízko…

Pirozek
Člen | 11
+
0
-

To je pravda, ta metoda je na tride Presenter, ktera je abstraktni. Jenze tady jsem se zasekl :)

Ani
Člen | 226
+
0
-

V komponentě můžeš použít $this->presenter.

Editoval Ani (7. 7. 2011 16:51)

Pirozek
Člen | 11
+
0
-

Aha :) Dobre vedet :-D Diky moc, uz to funguje. A diky i 22 ze mi to nerekl hned, ale snazil se me navest ;)

uestla
Backer | 796
+
0
-

Čili není problém použít

$presenter = $this->presenter;
$presenter->payload->x = $this->session->x;
$presenter->payload->y = $this->session->y;
$presenter->sendPayload();
Pirozek
Člen | 11
+
0
-

Jo, k tomu uz jsem se dopracoval sam. Jen jsem fakt netusil, ze v te komponente je presenter takhle schovanej. Kde je tahle ficura zdokumentovana? Musel jsem to nejak prehlednout, jinak bych se takhle neptal.

Filip Procházka
Moderator | 4668
+
0
-

V každé komponentě, která vychází z PresenterComponent, je přístupná metoda ->getPresenter(), která vyhledá rodiče, který je instancí třídy Presenter. Čili můžeš mít i více komponent v sobě a pořád to bude fungovat. A protože Nette\Object ti dovoluje k metodám, co začínají na get, přistupovat bez get, tak můžeš volat $this->presenter :)

Pirozek
Člen | 11
+
0
-

Dekuju :) Dobre vedet