Ošetření (HTTP headers have been sent)

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

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;
    }
Phalanx
Člen | 310
+
0
-

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

kiCkZ
Člen | 153
+
0
-

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));
    }
nightfish
Člen | 527
+
+1
-

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?

kiCkZ
Člen | 153
+
+1
-

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