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

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