Cannot set cookie after HTTP headers have been sent
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- .:M@rt!n:.
- Člen | 201
Ahoj,
na webu na jediné stránce se mě do logu zapisuje tato chyba:
Nette\InvalidStateException: Cannot set cookie after HTTP headers have been sent (output started at /www/sites/5/site14415/public_html/temp/cache/_Nette.FileTemplate/_Diskuze.default.latte-6ed5d3e6149d1b98704b4ff3474c6482.php:41). in /www/sites/5/site14415/public_html/libs/Nette/Http/Response.php:288 @ http://sdhbelohrad.php5.cz/diskuze/ @@ exception-2012-07-22-14-11-36-f0d9fbe68d010b5ba691833556119d93.html
Tuto chybu způsobuje formulář pro přidávání příspěvků do diskuze
(místo formuláře se vypíše error 500 a celý layout se rozhází). Je ale
divné, že to u mě dělá pouze prohlížeč opera a u jiných lidí třeba
všechny co mají a nebo zase žádný…
Vůbec nevím co s tím, proto prosím o radu? Díky
- .:M@rt!n:.
- Člen | 201
Ja ale nic nedumpuju. mám klasicky vytvořenou komponentu pro formulář:
protected function createComponentDiskuzeForm() {
$form = new Form();
$presenter = $this;
$form->addText('autor', 'Jméno: ', 20, 40)
->addRule(Form::FILLED, 'Je nutné vyplnit políčko pro jméno.');
$form->addTextArea('text', 'Text: ', 60)
->addRule(Form::FILLED, 'Je nutné vyplnit políčko pro text.');
$form->addSubmit('save', 'Odeslat')->setAttribute('class', 'default');
$form->addSubmit('cancel', 'Zrušit')
->setValidationScope(FALSE)
->onClick[] = function () use ($presenter) {
$presenter->redirect('default');
};
$form->onSuccess[] = callback($this, 'diskuzeFormSubmitted');
$form->addProtection('Vypršel časový limit, odešlete formulář znovu.');
return $form;
}
a pak ho ručně vykresluji:
<div id="diskuze_form">
{snippet form}
{form diskuzeForm class => ajax}
<table>
<tr>
<td>{label autor/}</td>
<td> {input autor}</td>
</tr>
<tr>
<td>{label text/}</td>
<td>{input text}</td>
</tr>
<tr>
<td> </td>
<td>{input save}{input cancel}</td>
</tr>
</table>
{/form}
{/snippet}
</div>
- formulář je převedený do AJAXu
- Filip Procházka
- Moderator | 4668
Dělá to addProtection()
. Musíš v Presenteru ručně
starovat session.
protected function startup()
{
parent::startup();
if (!$this->session->isStarted()) {
$this->session->start();
}
}
Session se ti totiž lazy otevírá až při lazy vykreslování a posílat sušenky až po kusu html stránky jaksi nejde :)
Editoval HosipLan (22. 7. 2012 15:24)