Autor | Zpráva | ||
---|---|---|---|
2rec Profil |
#1 · Zasláno: 20. 11. 2013, 22:09:55
Mám formulář v Nette, který uživateli umožňuje dynamicky přidat nebo ubrat pár řádků, ale když to udělá, všechna data, která uživatel doposud zadal, se ztratí a vykreslí se mu prázdný formulář. Potřeboval bych to uložit do session a pak je zadat jako defaultní hodnoty. Co dělám špatně?
public function renderAdd($active = false) { $session = $this->session->getSection('mySess'); if ($active != true) { $session->remove(); } else { if (isset($session)) { $this['myForm']->setDefaults($session->form); } } } public function createComponentMyForm($name) { $session = $this->session->getSection("mySess"); $rows = (isset($session->form['rows'])) ? $session->form['rows'] : 2; //default je 2 $form = new Form; $ints = array(); for($i = 0; $i < 10; $i++) { $ints[$i] = $i; } $form->addSelect('rows', "Položek faktury:", $ints)->setDefaultValue($rows); $form->addSubmit("submit", "Přidat položky") ->setValidationScope(NULL) ->onClick[] = callback($this, "fillTextboxs"); $textboxs = $form->addContainer('textboxs'); for($i = 1; $i <= $rows; $i++) { $value = (isset($session->form['inp'.$i])) ? $session->form['inp'.$i] : ""; echo "vypis value: $value<br />\n"; $sec = $textboxs->addContainer($i); $sec->addText('inp'.$i, 'Input ' . $i . ':') ->setDefaultValue($value); } return $form; } public function fillTextboxs(SubmitButton $button) { $session = $this->session->getSection('mySess'); $session->form = $this['myForm']->getValues(); $this->redirect('this', array('active' => TRUE)); } |
||
Jan Tvrdík Profil |
#2 · Zasláno: 20. 11. 2013, 22:15:25
2rec:
Začal bych tím, že bych zkusil zakomentovat $session->remove(); =)
|
||
Taps Profil |
#3 · Zasláno: 20. 11. 2013, 22:16:57
2rec:
„přidat nebo ubrat pár řádků, ale když to udělá“ a máš to řešeno pomocí AJAXU ? V případě použití ajaxu by totiž nemělo dojít ke znovuobnovení celé stránky a tím ztrátě vyplněných dat |
||
2rec Profil |
#4 · Zasláno: 20. 11. 2013, 22:27:36
Jan Tvrdík:
Tak zakomentování $session->remove nepomohlo. Taps: AJAX tam nepoužívám, rád bych to řešil přes Nette a jeho sessions, jen netuším, co mám v kódu špatně. |
||
Antik4 Profil |
Nejprve bych si dumpnul proměnou $active, a pokud se rovná true, tak $session u isset, zda-li není prázdný.
PS: Dopručuji dělat formulářové úpravy ve formulářové komponentě. Render k tomu neslouží. Když chceš získat parametr ze šablony {control register, $param} nebo z url v presenteru $this->getParam("action"); |
||
aDAm Profil |
#6 · Zasláno: 21. 11. 2013, 07:52:44
Pokud dobře chápu, chcete mít dynamický form...není tedy lepší využít Kdyby\Replicator ? který je k tomuto určený? http://addons.nette.org/cs/form-container-replicator
|
||
2rec Profil |
#7 · Zasláno: 21. 11. 2013, 14:35:22 · Upravil/a: 2rec
aDAm:
To je dobrý nápad. Půjdu do toho. Děkuju. Při řešení tohoto problému jsem ještě zjistil, že si neumím zobrazit dump, pokud to není přímo ve vykreslované části presenteru. Mohl by mi prosím ještě někdo napsat, jak si zobrazit dump z libovolného místa? |
||
aDAm Profil |
#8 · Zasláno: 21. 11. 2013, 15:00:39
Pomocí nette debugeru: Nette\Diagnostics\Debugger::dump($foo) a nebo dump do laděnky: Nette\Diagnostics\Debugger::barDump($foo)
|
||
2rec Profil |
aDAm:
Takže když použiju ten dump pro laděnku - Nette\Diagnostics\Debugger::barDump($foo), jak ji potom vyvolám? Když přidám tohle do kódu, kód pokračuje normálně dál, chtěl bych ten dump i hned zobrazit. Dobrý, už to mám. BarDump, to mě mohlo napadnout :-) |
||
aDAm Profil |
#10 · Zasláno: 21. 11. 2013, 21:13:11
dump - klasický dump, barDump - dump do laděnky
|
||
Časová prodleva: 10 let
|
0