Rozlisenie typu inputu pri manualnom vykresleni formu
- h4kuna
- Backer | 740
Když potřebuješ iterovat nad skupinou prvků, tak by mohlo stačit dát je do vlastního kontejneru a pak iterovat nad tímto kontejnerem. Tím právě odstíníš hidden inputy, csrf, submity aj.
{foreach $form['myContainer']->getComponents() as $input}
{formContainer $input}
{input foo}
{/formContainer}
{/foreach}
- marioff
- Člen | 69
h4kuna to vyzera dost dobre riesenie… ak by som vsak v buducnosti potreboval realne pouzivat tie kontajneri tak mozem do toho kontajnera ‚myContainer‘ normalne zanorit dalsie kontajneri? lebo teraz to mam tak ze mam Abstractnu tovarnicku na formulare , ktora riesi v podstate vsetko co treba (normalizovanie dat , upload atd) a potom samotna tovarnicka ktora ju zdedi ma len metodu obsahujucu jednotlive inputy, nic viac… aby som v buducnosti nieco nelutoval ak su tam nejake obmedzenia
- marioff
- Člen | 69
Resp. mal by som otazku ako docielit vlastne renderovanie formulara ak mi nestaci sposob ktorym ho mozem renderovat upravou Nette\Forms\Rendering\DefaultFormRenderer
najidealnejsie by bolo nejak takto.. mam sablonu kde iterujem nad prvkami a do tej sablony by som vlozil komponentu form, cim sa mi vykresli presne ako chcem…
da sa to nejak? skusal som vlastnu komponentu rozsirenim UI\Control ale tam zase nedostanem ten form do sablony :(
- h4kuna
- Backer | 740
Ano další zanoření kontejnerů je možné. Píšeš že dědíš továrničky a jak rozšiřuješ formulář? Doporučuji kouknout na kompozice. Manuální vykreslování je naprosto v pohodě ukázka je v předchozím postu. Automatické rendrování nerozlišuje kontejnery, ty si je sám můžeš oddělit pomocí addGroup(‚Nějaký název‘).
Vlastní šablona a vykreslení půjde určitě přes UI\Control, to tam máš jenom něco špatně.
- marioff
- Člen | 69
abstraktna trieda obsahuje celu zakladnu pracu s formami.. spracovanie, sanitovanie atd.. a rozsirim ho dedicnostou..
ako prakticky dostanem do metody render(Form $form) komponenty ktora dedi od UI\Control… najlepsie v sablone…
napr. {control NAZOV, $form} – ale ako ziskat ten $form aby som ho dostal na spracovanie tou komponentov?
- h4kuna
- Backer | 740
Takže záleží na charakteru použití formuláře, ale určitě nebude správně mít přípravu formuláře v createComponent v presenteru nýbrž v nějakém Factory objektu. Tím pak můžeš dosáhnout lepšího rozšíření formuláře a tím pak máš volnější ruce poslat si Factory do UI\Control a dát mu vlastní šablonu. Teď nevím zda je někde nějaký článek, takže ukázku ti nepošlu.
Osnova
- Založ si jednoduchou třídu FormFactory
- Založ si UI\Control (MyControl) a v constructoru předej FormFactory a vytvoř si požadovanou šablonu
- MyControl injektni do Presenteru a tuto instanci vrať v createComponent*
Pokud to nepůjde napiš mi na mail v profilu a vyřešíme přes skype.
Editoval h4kuna (23. 2. 2015 11:32)
- marioff
- Člen | 69
tak som sa s tym pohral ale nevyhovuje mi to.. je to viac pisania ako mam teraz a celkovo sa mi to zda nejake zlozitejsie..
jedine, pre mna idealne riesenie, na ktore som „prisiel“ , je vykreslit formular v sablone takto:
{includeblock '../components/sablona_formulara.latte', form => nazov_formulara}
a samotna sablona_formulara.latte:
{form $form}
{foreach $form->getComponents() as $input}
// iterovanie nad prvkami
......
nemal by som tym nic pokazit do buducnosti? Budu tam fungovat napr. snippety?
este asi treba pripomenut ze pouzivam FormMacros od Filipa Prochazku