jak předávat data mezi formuláři v rámci jednoho presenteru

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

Chtel bych mit serii nekolika formularovych komponent, ktere na zaklade vstupu uzivatele a předchozích získaných dat postupne získávají další rozsahlá datová pole z DB.

class MyPresenter extends BasePresenter {

protected function createComponentForm1() {
// prvni vstup1 uzivatele
}

public function form1Submitted() {
// nacteni dat z DB podle vstupu1 uzivatele a ulozeni do pole $ARR1
redirect(this)
}

protected function createComponentForm2() {
// na zaklade dat v $ARR pripravim dalsi vstup2 pro uzivatele
}

public function form2Submitted() {
// nacteni dat z DB podle vstupu2 uzivatele a ulozeni do pole $ARR2
}

protected function createComponentForm3() {
// na zaklade dat v $ARR2 pripravim dalsi vstup3 pro uzivatele
}

public function form3Submitted() {
// nacteni dat z DB podle vstupu3 uzivatele a ulozeni do pole $ARR3
}

// zpracovani poli $ARR1, $ARR2, $ARR3 a ulozeni vysledku do DB

}

Neni mi ale uplne jasny jak si spravne data mezi formulari predavat.
Zkousel jsem predavat jako parametr pri presmerovani:

$this->redirect('Presenter:akce', $ARR1);

nebo zavest pole jako persistentni parametr ale koncim chybou (asi kvuli prilisne velikosti pole pro GET)

Mozna na to jdu uplne blbe ale jak by se v Nette melo toto predavani elegantne resit ?

japijana
Člen | 11
+
0
-

Mohol by si to urobit napr cez sessions

V ramci formSubmitted ulozis, redirect a pri create vytiahnes .

Editoval japijana (2. 3. 2016 6:58)

CZechBoY
Člen | 3608
+
+2
-

https://github.com/…Forms-Wizard
Pouzil bych hotovy reseni – vytvaret znovu asi nema smysl.

pp
Člen | 50
+
0
-

Zkusil jsem si ukladat data postupne do session ale ve zpracovani posledniho formu k nim stejne nemam pristup.
Primo v souboru na serveru ale jsou. V cem je problem ?

protected function createComponentFormX1() {
    $form = new Form;
    $form->addSubmit('submit', 'A');
    $form->onSuccess[] = callback($this, 'formX1Submitted');
    return $form;
}

public function formX1Submitted($form) {
    $section = $this->getSession('XXX');
    $section->aaa = "aaa";
    $this->redirect('Router:A');
}



protected function createComponentFormX2() {
    $form = new Form;
    $form->addSubmit('submit', 'B');
    $form->onSuccess[] = callback($this, 'formX2Submitted');
    return $form;
}

public function formX2Submitted($form) {
    $section = $this->getSession('XXX');
    $section->bbb = "bbb";
    $this->redirect('Router:B');
}



protected function createComponentFormX3() {
    $form = new Form;
    $form->addSubmit('submit', 'C');
    $form->onSuccess[] = callback($this, 'formX3Submitted');
    return $form;
}

public function formX3Submitted($form) {
    $section = $this->getSession('XXX');
    dump($section);
    // predpokladal jsem ze tady uvidim v session obe promenne "aaa" i "bbb" ale session ""XXX" ma data NULL
}

Tady je dump sekce

Nette\Http\SessionSection #de7a
session private => Nette\Http\Session #f235
regenerated private => NULL
options private => array (15)
request private => Nette\Http\Request #937d
response private => Nette\Http\Response #83bd
cookieDomain => ""
cookiePath => "/"
cookieSecure => FALSE
cookieHttpOnly => TRUE
warnOnBuffer => TRUE
code private => 200
handler private => NULL
name private => "XXX" (3)
data private => NULL
meta private => FALSE
warnOnUndefined => FALSE
iNviNho
Člen | 352
+
0
-

Mne sa inak tiež niekedy stáva, že ked si dumpnem napr.

<?php
$session = $this->getSession("kosik");
dump($session);
?>

tak mi píše, že v data je null
akonáhle skúsim dump

<?php
...
dump($session->title);
?>

Tak je tam to, čo tam má byť :) Divné, ale funguje.