Dynamicky tvořený formulář

S_I_M_O_N
Člen | 23
+
0
-

Ahoj, mám formulář, ve kterém si uživatel dynamicky přidává formulářové prvky (třeba text input, file input apod.). Tyto prvky tam normálně appenduji pomocí jQuery s unikátním „name=“. Moje otázka je, jak dostanu tyto vstupy do presenteru, abych je tam mohl zpracovat?

Mate mě i to, že v Nette, jestli jsem dobře pochopil, musí být každý input deklarován v PHP v „továrničce“, a poté být vložen korektně v Latte na své místo. Ale já dopředu nevím, kolik jich tam vůbec uživatel dá. Tak jak je mám předem deklarovat?

A ještě jedna doplňující otázka. Pro ty inputy bych si potřeboval nastavit vlastní třídy („class=…“, aby to nějak vypadalo), nějak inteligentně, to znamená, že odpadá možnost je tam dávat přímo do PHP, do té deklarace, jako jsem to už asi někde viděl.

S_I_M_O_N
Člen | 23
+
+1
-

F.Vesely napsal(a):

Viz https://doc.nette.org/cs/forms#…

Vypadá to jako přesně to, co hledám. Nechápu jak jsem si toho nevšiml… Díky moc.

S_I_M_O_N
Člen | 23
+
0
-

A takhle si tedy můžu přesně udělat ten celý formulář (i prvky, u kterých vím, kolik jich bude)? Jenom, abych si tam mohl přidat hezky CSS classu? Je to s tou třídou takhle best practice, nebo je lepší udělat továrničku a dát názvy tříd do PHP?

S_I_M_O_N
Člen | 23
+
0
-

Ještě bych se rád zeptal k tématu. Když mám v tom Low-level formuláři předem neznámý počet file inputů, jak to v tom presenteru zpracuji? Už se s tím asi 2 hodiny dělám, ale nemůžu na to přijít.

Pro debug by stačilo vzít názvy jednotlivých souborů a vypsat je třeba ve flashMessage. Poté bych však chtěl ty uploadované soubory zpracovat (jestli sedí extensiony), a poté přesunul do nějaké vhodné složky.

Pro jiné inputy než „file“ mi to funguje. Zajímají mě i DATA_KEYS u těch souborů.

<?php
$files = $form->getHttpData($form::DATA_FILE | $form::DATA_KEYS, 'file-add[1][]');
$files_string = print_r($files, true);

$this->flashMessage($files_string);
?>
David Klouček
Člen | 57
+
+1
-

ppar napsal(a):

Zřejmě hledáš https://componette.org/…-multiplier/

Já za sebe doporučuju hodně dynamické věci, klidně i jen část formuláře udělat v Reactu/Vue. Sice tím obcházíš Nette formy, na serveru si budeš muset data zvalidovat sám, ale jinak tyhle věci elegantně udělat nejdou.