Odesílání http stavových kódů

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

Ahoj, odesílám z presenteru data pomocí JSON a potřeboval bych posílat i stavové kódy jak se to dá udělat?
mám tento kód:

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

Chtěl bych ještě nějak vedle toho být schopen odesílat kód. Díky za radu.

Šaman
Člen | 2666
+
0
-

Stavový kód je obsažen přímo v té Response

bluray
Člen | 178
+
0
-

Já vím, jenomže jak to odešlu? metodě sendResponse musím dávat Nette\Application\IResponse…

Šaman
Člen | 2666
+
-1
-

Hmm, pravda. Vypadá to, že nastavování kódů ani JsonResponse neumí. Což dává logiku – pokud chceš odesílat data, mělo by být kód OK.

Buď si ten kód zabal do toho JSON – takhle to dělám v jednom REST API. I když je záznam nenalezen, tak JSON přijde jako 200: OK (v komunikaci s API problém není), ale JSON obsahuje pole code s hodnotou 404: Not found. (tedy bezchybná odpověď z API mi přinesla v datech informaci, že záznam neexistuje).

Anebo si budeš muset posílat ty response ručně. Pomocí vlastní implementace Nette\Application\IResponse, viz všechny, které jsou v Nette.

bluray
Člen | 178
+
0
-

Ok, díky za radu

blaztar
Člen | 93
+
0
-

Nevím zda to řeším správně, ale u mě to vypadá takto.

SomePresenter:

if (!$this->isAjax()) {
    $this->error('No ajax!', IResponse::S403_FORBIDDEN);
}

Error4xxPresenter:

if ($this->isAjax()) {
    $this->payload->error = TRUE;
    $this->terminate();
}