Problém po vymazání chache prohlížeče
- n.u.r.v.
- Člen | 485
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
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)
- David Matějka
- Moderator | 6445
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
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
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
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
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č…