Cannot send session cache limiter

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

Zdravím,

mám jednoduchý presenter, ve kterém se vytvoří formulář za pomoci továrničky. Psal jsem to v doporučované verzi 0.8. Teď jsem si stáhl verzi 0.9 a začalo mi to vyhazovat chybu: Cannot send session cache limiter – headers already sent. Laděnka to vztahuje ke kódu: $form->addProtection.

class PokusPresenter extends BasePresenter
{
  public function renderDefault()
	{
		$this->template->title = "Hledání";
		$this->template->form = $this['hledaniForm'];
	}

	public function hledaniFormSubmitted(AppForm $form)
	{
  $data = $form->getValues();
  $this->template->zaznamy = $data;
	}

	protected function createComponentHledaniForm()
	{
    $form = new AppForm;

    $form->addText('search', 'Hledaný výraz:')
	   ->addRule(Form::MIN_LENGTH, 'Hledaný výraz je příliš krátký. Zadejte minimálně %d znaky', 3);

    $form->addSubmit('ok', 'Hledat');
    $form->onSubmit[] = array($this, 'hledaniFormSubmitted');

    //$form->addProtection('Vypršel ochranný časový limit, odešlete prosím formulář ještě jednou');
    return $form;
	}
}
Milhauz
Člen | 26
+
0
-

Zdravím,
podobný problém se tu již řešil.

jasir
Člen | 746
+
0
-

hauerland napsal(a):

Zdravím,

mám jednoduchý presenter, ve kterém se vytvoří formulář za pomoci továrničky. Psal jsem to v doporučované verzi 0.8. Teď jsem si stáhl verzi 0.9 a začalo mi to vyhazovat chybu: Cannot send session cache limiter – headers already sent. Laděnka to vztahuje ke kódu: $form->addProtection.

Také už jsem na to narazil. Je to proto, že addProtection() si potřebuje šáhnout na session, ale když se vytváří, výstup už byl zahájen. Dočasným řešením by bylo „šáhnout si na komponentu“ (a tím jí vytvořit) před zahájením výstupu. Toho docílíš zařazením $this->getComponent('hledaniForm') nebo $this['hledaniForm'] někam před začátek výstupu, zkus actionDefault (ačkoliv když jsem začal psát tento příspěvek, chtěl jsem doporučit dát to do renderDefault ale pak jsem si všiml že už to tam je – přijde mi zvláštní že v renderDefault() už byl zahájený výstup. Není tam ještě nějaký problém? Nějaká zapomenutá notice apod. Zkus Debug::$strictMode = TRUE)

Jinak tohle asi bude potřeba řešit nějak koncepčně.

Editoval jasir (24. 7. 2009 10:19)

hauerland
Člen | 16
+
0
-

Když to addprotection zakomentuju, tak mi to vyhazuje parse error: CurlyBracketsMacros.php Line: 565
"

return ($widget[0] === '$' ? "if (is_object($widget)) $widget->$method($param); else " : '')

Když jsem nakopíroval akrabat.forms pod devítkovou verzi, tak mi to házelo stejnou chybu s widgety.

jasir
Člen | 746
+
0
-

hauerland napsal(a):

Když to addprotection zakomentuju, tak mi to vyhazuje parse error: CurlyBracketsMacros.php Line: 565

Parse error ve zdrojovém souboru Nette? Nehrál sis s tím nějak? Máš nejnovější revizi?

Edit: Tak zajímavá situace, tento řádek je zřejmě v pořádku, ale u mě v PhpEDu syntax checker taky hlásí chybu. Nicméně mi to běhá bez problému, odzkoušeno. php -l taky nehlásí chybu. Je to tam v té konstrukci $widget->$method, pokud to změním na {$widget}->{$method}, PhpEd se přestane vztekat.

Editoval jasir (24. 7. 2009 13:31)

hauerland
Člen | 16
+
0
-

Stejná chyba se vyhazuje pod doporučovanou devítkovou verzí, pod nejnovějším nightbuildem. V opravené formě ale normálně funguje pod 0.8 verzí.

Editoval hauerland (24. 7. 2009 13:41)

David Grudl
Nette Core | 8228
+
0
-

jasir napsal(a):

Edit: Tak zajímavá situace, tento řádek je zřejmě v pořádku, ale u mě v PhpEDu syntax checker taky hlásí chybu. Nicméně mi to běhá bez problému, odzkoušeno. php -l taky nehlásí chybu. Je to tam v té konstrukci $widget->$method, pokud to změním na {$widget}->{$method}, PhpEd se přestane vztekat.

Chyba to není, ale upravím to, ať má PHPEd radost ;)

jasir
Člen | 746
+
0
-

Óóó, děkuji :-) Ale je to fakt prkotina ;-)

hauerland
Člen | 16
+
0
-

Tak jsem si stáhl doporučovanou verzi, a stejnou chybu mi vyhazuje i příklad v distribuci CD Collection. Fakt nechápu :-(

jasir
Člen | 746
+
0
-

hauerland napsal(a):

Tak jsem si stáhl doporučovanou verzi, a stejnou chybu mi vyhazuje i příklad v distribuci CD Collection. Fakt nechápu :-(

To je tedy podivné. Co máš za verzi PHP?

David Grudl
Nette Core | 8228
+
0
-

hauerland napsal(a):

Tak jsem si stáhl doporučovanou verzi, a stejnou chybu mi vyhazuje i příklad v distribuci CD Collection. Fakt nechápu :-(

Čím to je už zmiňoval Jasir. Projevuje se to jen někde, protože to závisí na konfiguraci PHP. Asi nejvhodnějším řešením je do bootstrap.php přidat

Environment::getSession()->start();
hauerland
Člen | 16
+
0
-

jasir napsal(a):

To je tedy podivné. Co máš za verzi PHP?

5.2.2

jasir
Člen | 746
+
0
-

hauerland napsal(a):

jasir napsal(a):

To je tedy podivné. Co máš za verzi PHP?

5.2.2

Hmm. Máš tedy staženou poslední verzi Nette z SVN a stále ti to hází parse error, správně?

hauerland
Člen | 16
+
0
-

Tak to bylo asi fakt konfigurací serveru. Stáhnul jsem si nejnovější XAMPP a funguje to.