Ošetření (HTTP headers have been sent)
- kiCkZ
- Člen | 153
Ahoj,
chci se zeptat, mam v presenteru v komponentě formulář, který po
zpracování získá z API json výstup.
Jak řešíte již odeslanou HTTP hlavičku, aby jste mohli po načtení
dat(json) do proměnné přesměrovat např. do render metody a vykreslit
to ?
Díky za pomoc
public $json;
public function renderResult()
{
$this->template->json = $this->json;
}
public function createComponentForm()
{
$form = new Form();
$form->addText('git_user', 'Název uživatele na Githubu: ');
$form->onSuccess[] = [$this, 'processForm'];
$form->addSubmit('send', 'Najít');
return $form;
}
public function processForm($form, $values)
{
$json = json_decode($this->getJson($values->git_user), true);
$this->redirect('result');
}
public function getJson($git_user)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.github.com/users/' . $git_user . '/repos');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['User-Agent: GitHub-username']);
$response = curl_exec($ch);
if(curl_error($ch)) {
throw new Exception('Chyba dotazu na Github');
}
return $response;
}
- kiCkZ
- Člen | 153
Phalanx napsal(a):
Proč si data neuložíš do databáze nebo jiného úložiště? Možná je to mezikrok, který hledáš.
Nebo můžeš hned v processForm vrátit JSON místo redirectu
$this->sendResponse(new \Nette\Application\Responses\JsonResponse($json));
Zkusil jsem to změnit, nicméně mi to stále hlásí stejnou hlášku.
public function processForm($form, $values)
{
$json = json_decode($this->getJson($values->git_user), true);
$this->sendResponse(new \Nette\Application\Responses\JsonResponse($json));
}
- kiCkZ
- Člen | 153
nightfish napsal(a):
V chybové hlášce o nemožnosti odeslání HTTP hlaviček bys měl mít napsané, kde výstup začal. Nemáš třeba někde v kódu (ve startup nebo action*) metodě zapomenutý
dump()
? Nebo na začátku souboru BOM?
Ano říkalo mi to tuto hlášku na tento výstup:
$response = curl_exec($ch);
Nicméně tímto řádkem mi to začlo fungovat:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);