AbortException … not very silent :-)

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

Hezký den…

Mám komponentu, která má při určitém ajaxově volaném signálu vracet JSON data. Mám v ní takovýto kód:

$presenter->sendResponse(new JsonResponse($data));

Místo požadovaných dat ale dostanu pětistovku a v logu mám Nette\Application\AbortException.

Co dělám špatně?

Díky

josef.sabl
Člen | 153
+
0
-

Odpověď je asi zde

Majkl578
Moderator | 1364
+
0
-

Provádíš to moc pozdě, až po skončení životního cyklu presenteru. Musíš tak učinit někde mezi startup (včetně) a shutdown (vyjma) fází.

josef.sabl
Člen | 153
+
0
-

Majkl578 napsal(a):

Provádíš to moc pozdě, až po skončení životního cyklu presenteru. Musíš tak učinit někde mezi startup (včetně) a shutdown (vyjma) fází.

Ano, je to tak. Provádím to v metodě render komponenty. Pokusil jsem se tedy volání umístit do __construct komponenty, ale tam zase dostávám:

Component '' is not attached to 'Nette\Application\UI\Presenter'.

Majkl578
Moderator | 1364
+
0
-

Pokud taková věc do komponenty patří, čímž si nejsem jistý, správné místo je metoda attached():

protected function attached($parent)
{
	if (!$parent instanceof Presenter) {
		return;
	}

	$this->blabla();
}
josef.sabl
Člen | 153
+
0
-

Majkl578 napsal(a):

Pokud taková věc do komponenty patří, čímž si nejsem jistý, správné místo je metoda attached():

protected function attached($parent)
{
	if (!$parent instanceof Presenter) {
		return;
	}

	$this->blabla();
}

Super, díky za tip.

Ad nepatří: kam tedy patří? Používám 3rd party komponentu, která si ajaxově stahuje data. Rád bych ji strčil do své komponenty (což je v podstatě tabulka) a potřebuju tedy vrátit JSON.

enumag
Člen | 2118
+
0
-

Nešlo by to přes signály?

Majkl578
Moderator | 1364
+
0
-

Taky bych asi použil signál na komponentě.

josef.sabl
Člen | 153
+
0
-

Jo, udělal jsem refaktoring a je to přes signál na komponentě. Díky za nasměrování.