Predavani value do formulare ze session
- adferg
- Člen | 31
Ahoj, resim takovy pro me ne uplne trivialni problem. Mam jednoduchou stranku s formularem o nekolika textovych inputech. Ten formular ma uzivatel vyplnovat opakovane a cilem je, aby byla nektera pole po opakovanem nacteni formulare uz predvyplnena (typicky ta, ktera jsou stale stejna, jako e-mail).
Takze klasicky mam v presenteru nahozeny formular a sablona mi ho
vykresluje, model nasledne uklada do databaze – potud vse ok.
Vlozit data z prvniho odeslaneho formulare do session se mi podarilo,
nicmene:
Zkusil jsem si dat do formulare k poli e-mail
->setHtmlAttribute('placeholder', $this->getSession('mySection')->email)
a to je OK, ale
->setHtmlAttribute('value', $this->getSession('mySection')->email)
uz mi nezobrazuje v poli nic.
Zaroven nevim, jak tam dat podminku, aby se pri prvnim odesilani formulare, kdy v session jeste nejsou zadna data, zobrazil nejaky predem dany placeholder typu „e-mail“ a hodnota atribut value nebyl dany.
Omlouvam se, snad je takhle pochopitelny o co mi jde. Budu vdecny za radu/pomoc. Diky
- Ondřej Kubíček
- Člen | 494
výchozí hodnoty se nastavuje přes setDefaultValue
viz
dokumentace https://doc.nette.org/…in-presenter#…
- adferg
- Člen | 31
Ondřej Kubíček napsal(a):
výchozí hodnoty se nastavuje přes
setDefaultValue
viz dokumentace https://doc.nette.org/…in-presenter#…
Aha, pravda, pravda. To funguje. Dekuju! Jeste se ale zeptam, jak by bylo mozne vyresit tu podminku… tedy pokud v session je udaj o e-mailu, zobrazit jej, pokud tam neni, dat do pole placeholder nastaveny v sethtmlattribute. Dekuji
- adferg
- Člen | 31
No, z nejakeho duvodu, to tak ma byt. Ale mozna jsem jen nedokazal spravne popsat pozadovanou funkcionalitu – jde o to, aby pole ktere uz jednou uzivatel vyplnil, nemusel vyplnovat podruhe, protoze vstup by se nemel (ale muze) menit.
Vyresil jsem to asi ne uplne optimalne tim, ze jsem pridal placeholder do sablony a az kdyz je v session hodnota, tak se prepise value.
S mym experimentovanim se session ale vyvstal novy problem pri nasazovani na produkci. V error logu jest psano:
PHP Warning: session_id(): Cannot change session id when headers already sent in
Myslel jsem, ze pomuze promazat cache aplikace, ale ani to, ani otevreni v anonymnim okne nepomaha. Poradite prosim?
- David Grudl
- Nette Core | 8239
Pokud už to dříve vyplnil, tak to nastav jako výchozí hodnotu (setDefaultValue) a kašli na placeholder, to je skoro vždycky zlo.
- dakur
- Člen | 493
@adferg Na placeholder žádný if nepotřebuješ, protože pokud field obsahuje default value, tak se ani placeholder neukáže.
$field
->setDefaultValue(this->getSession('mySection')->email)
->setHtmlAttribute('placeholder', 'jan@novak.cz');
✔
PHP Warning: session_id(): Cannot change session id when headers already sent in
Kde přesně k tý session přistupuješ? Vypadá to, že voláš
getSession()
až po tom, co se začala renderovat nějaká
šablona. Anebo máš někde na začátku některého souboru nějaký
tisknutelný znak (např. mezera před <?php
).
Editoval dakur (21. 4. 2021 9:29)