Jak na vicekrokovy formulář?

iDome89
Člen | 27
+
0
-

Mam formular č1 který se sklada jen ze $form->addSelect který tahá hodnoty z db a podle toho co uživatel vybere, po vyhodnocení formu ho pošle na jiný form č2 který bere hodnoty z jiné tabulky db dle toho co uživatel vybral v č1. Nevím jak toto vyřešit. Napadlo mě pomocí Sessions ale nechapu jak to udělat v praxi. Diky za pomoc

uestla
Backer | 796
+
0
-

Osobně používám dynamické sestavování formuláře – funguje to jak standardně tak s AJAXem a eliminují se tím starosti spojené se sessions.

Tedy něco ve stylu

use Nette\Application\UI\Form;

protected function createComponentForm(): Form
{
	$form = new Form;

	$select = $form->addSelect(...);

	if ($select->value === 'XY') {
		$form->addText(...);
	}

	return $form;
}
iDome89
Člen | 27
+
0
-

To vypadá dobře ale blbě jsem se asi vyjádřil, form č2 je v jiné šabloně a tam potrebuju dostat tu svojí proměnnou kterou vytahnu ze selectu. Druha věc je pokud v tom selectu mam 15 veci na vyber, musim napsat 15 podminek a to je dost debilni.

Editoval iDome89 (15. 9. 2019 22:02)

bringback7
Člen | 6
+
0
-

Jestli jsem ti rozuměl správně, tak prostě přistoupíš k té proměnné, ktrá se natáhne do formu pomocí $values a pak to pošleš dál pomocí redirectu, něco jako $this->redirect(‚kam_přeposlat‘, [„pojmenuješ_proměnnou_jak_má_být_předána“ ⇒ $values->proměnná_jak_jí_máš_ve_formuláři]);

Editoval bringback7 (16. 9. 2019 14:30)

iDome89
Člen | 27
+
0
-

bringback7 napsal(a):

Jestli jsem ti rozuměl správně, tak prostě přistoupíš k té proměnné, ktrá se natáhne do formu pomocí $values a pak to pošleš dál pomocí redirectu, něco jako $this->redirect(‚kam_přeposlat‘, [„pojmenuješ_proměnnou_jak_má_být_předána“ ⇒ $values->proměnná_jak_jí_máš_ve_formuláři]);

Nechápu to na 100%, dokázal bys mi ukázat malý příklad toho, nebo respektive, chápu to dobře že,
např mám :
$username = $values->username

napíšu :

$this->redirect(SecondPage:default, [$selectedUser ⇒ $username]);

GEpic
Člen | 562
+
+2
-

Buď si to předej jako parametr, nebo pokud je těch dat víc, můžeš to uložit do session nebo do cookies (záleží taky na tom, o jaká data se jedná – hesla a podobné věci bych do cookies neukládal). Těch možností je spoustu a na všechno najdeš na stránkách návod. :)

Editoval GEpic (26. 9. 2019 21:11)

Kcko
Člen | 465
+
-1
-

uestla napsal(a):

Osobně používám dynamické sestavování formuláře – funguje to jak standardně tak s AJAXem a eliminují se tím starosti spojené se sessions.

Tedy něco ve stylu

use Nette\Application\UI\Form;

protected function createComponentForm(): Form
{
	$form = new Form;

	$select = $form->addSelect(...);

	if ($select->value === 'XY') {
		$form->addText(...);
	}

	return $form;
}

@uestla
Tohle Ti funguje? Mě tedy ne. $select->value je vždy NULL (Nette 2.3)

Editoval Kcko (23. 11. 2019 0:13)

uestla
Backer | 796
+
0
-

@uestla
Tohle Ti funguje? Mě tedy ne. $select->value je vždy NULL (Nette 2.3)

To máš tedy pravdu, již se kaji!

V nové verzi se odeslaná data načítají jen v případě, že je formulář „připnut“, čehož lze docílit například pomocí konstruktoru:

use Nette\Application\UI\Form;

protected function createComponentForm(): Form
{
    $form = new Form($this, 'form');

    $select = $form->addSelect(...);

    if ($select->value === 'XY') {
        $form->addText(...);
    }

    return $form;
}

Tento příklad mi již funguje (ačkoli podle slov autora neřeší jeho problém, čili bych se to nebál označit jako offtopic, každopádně díky za upozornění).

Kcko
Člen | 465
+
0
-

uestla napsal(a):

@uestla
Tohle Ti funguje? Mě tedy ne. $select->value je vždy NULL (Nette 2.3)

To máš tedy pravdu, již se kaji!

V nové verzi se odeslaná data načítají jen v případě, že je formulář „připnut“, čehož lze docílit například pomocí konstruktoru:

use Nette\Application\UI\Form;

protected function createComponentForm(): Form
{
    $form = new Form($this, 'form');

    $select = $form->addSelect(...);

    if ($select->value === 'XY') {
        $form->addText(...);
    }

    return $form;
}

Tento příklad mi již funguje (ačkoli podle slov autora neřeší jeho problém, čili bych se to nebál označit jako offtopic, každopádně díky za upozornění).

Já jsem rád za každé „jiné“ řešení konkrétního problému. Já to řeším handle metodou a hodnotami z getHttpData. V životě by mě nenapadlo to řešit rovnou v továrně, ale je to zajímavé :-), díky.