Problém po vymazání chache prohlížeče

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

Ahoj, dnes jsem si smazal v Opeře cookies a od té doby vždy při prvním přístupu ke svému projektu (na localu) se mi zobrazuje laděnka s následující chybou:

User Notice

Possible problem: you are starting session while already having some data in output buffer. This may not work if the outputted data grows. Try starting the session earlier.

29: <?php Nette\Latte\Macros\FormMacros::renderFormEnd($_form) ?>

Dělá to jen na úvodní obrazovce a jen při prvním načtení stránky…

Kde může být chyba? Díky

Editoval n.u.r.v. (9. 12. 2013 14:00)

n.u.r.v.
Člen | 485
+
0
-

Ještě jsem zkusil následující – smazal jsem v továrničce na přihlašovací formulář toto:

$form->addProtection();

Pak to funguje…

Edit: asi je to tento problém: "":https://forum.nette.org/…ddprotection

Editoval n.u.r.v. (9. 12. 2013 14:14)

n.u.r.v.
Člen | 485
+
0
-

zatím jsem to v prezenteru vyřešil takto, ale nevím, zda je to dobré řešení:

public function actionIn(){
        $this->createComponentSignInForm();
    }
David Matějka
Moderator | 6445
+
0
-

Ne, to neni dobre reseni. Tovarnicky nevolej primo. Inicializovat komponentu muzes pres $this['signInForm']

Lepsi ale bude bud zapnout session autostart
Nebo pokud ten form s protection neni na kazde strance a nechce se ti zbytecne startovat session pro vse, muzes ho nastartovat manualne pomoci

$this->session->start()
n.u.r.v.
Člen | 485
+
0
-

matej21 napsal(a):

Ne, to neni dobre reseni. Tovarnicky nevolej primo. Inicializovat komponentu muzes pres $this['signInForm']

Lepsi ale bude bud zapnout session autostart
Nebo pokud ten form s protection neni na kazde strance a nechce se ti zbytecne startovat session pro vse, muzes ho nastartovat manualne pomoci

$this->session->start()

Ano – toto → $this[‚signInForm‘] ← jsem našel i zde na foru, ale nefungovalo… zkoušel jsem i $form = $this[‚signInForm‘]; (bavíme se o action metodě)

addProtection používám v každém formuláři, ale formulář mám jen asi na 70% stránek…tak nevím, zda zapnout ten autostart…no…možná zkusím $this->session->start()

Edit: už jde i $this[‚form…‘] – já vůl jsem měl asi první písmeno v názvu formu velké…

Editoval n.u.r.v. (9. 12. 2013 15:06)

n.u.r.v.
Člen | 485
+
0
-

když už jsem založil to téma – tak:

Píšeš, že není dobré volat přímo továrničku, ale já mám v jednom presenteru dva formuláře, které mají půlku úplně stejnou a půlku jinak (dle typu usera).

vytvořil jsem proto společnou část formuláře:

createComponentBaseForm(){
	$form=new Form();
	....
	return $form;
}

a pak pro dvě továrničky, které volají tu první společnou:

createComponentAdminForm(){
	$form = $this->createComponentBaseForm();
	...
	return $form;
}
createComponentUserForm(){
	$form = $this->createComponentBaseForm();
	...return $form;
}

To je ok?

David Matějka
Moderator | 6445
+
0
-

k session: v tvem pripade bude asi nejlepsi zapnout autostart

k tovarnickam: v tomhle pripade je to vicemene ok, jelikoz ta metoda „createComponentBaseForm“ tam neni kvuli vytvoreni komponenty samotne. ale prejmenoval bych ji treba na „createBaseForm“ – at uz kvuli prehlednosti, aby bylo jasne, ze to neni tovarna na komponentu, a taky kvuli bezpecnosti – je tam teoreticke riziko bezpecnostni diry, nekdo by mohl vytvorit onu baseForm komponentu pomoci ?do=baseForm-submit a mohly by se stat nehezke veci :)

n.u.r.v.
Člen | 485
+
0
-

matej21 napsal(a):

k session: v tvem pripade bude asi nejlepsi zapnout autostart

k tovarnickam: v tomhle pripade je to vicemene ok, jelikoz ta metoda „createComponentBaseForm“ tam neni kvuli vytvoreni komponenty samotne. ale prejmenoval bych ji treba na „createBaseForm“ – at uz kvuli prehlednosti, aby bylo jasne, ze to neni tovarna na komponentu, a taky kvuli bezpecnosti – je tam teoreticke riziko bezpecnostni diry, nekdo by mohl vytvorit onu baseForm komponentu pomoci ?do=baseForm-submit a mohly by se stat nehezke veci :)

jj, díky – názvy formu jsem uvedl jen jako příklad, ale to createComponent tam je…dám pryč…