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);