Vykreslení formuláře ručně
- ondrej256
- Člen | 187
Zdravím,
mám docela složitý formulář napsaný jako komponentu v App/Forms
Formulář musím vykreslovat ručně, protože je netradičně uspořádaný, takže nemůžu použít makro {control}
ale říkám si, že by asi nebylo pěkné kdybych měl zaprasených 50 řádků v šabloně.
Chtěl bych si vykreslení formuláře udělat bokem a pak to jen jedním řádkem v šabloně zavolat.
Napadlo mně dát si do templates/components nějaký latte soubor, kde si formulář vykreslím a pak ve svojí šabloně zavolám jen {include}
Je to dobrá cesta nebo existuje nějaká lepší?
- David Matějka
- Moderator | 6445
Kdyz mas formular jako komponentu, tak at se o vykresleni postara komponenta a ne presenter.
- ondrej256
- Člen | 187
No já mám u toho formuláře interface s metodou create, která vrací
instanci formuláře a mám to zaregistrované jako službu. A teď nějak
nevím jak to obalit komponentou aby v tom nebyl zmatek.
To mám udělat komponentu se skoro stejným názvem jako je název formuláře
a dát ji do stejné složky? tzn. App/Forms ? a pak místo toho formuláře
mám zaregistrovat tu komponentu jako službu?
To mě připadá zmatené. Přímo v komponentě vyrábět formulář nechci, protože bych ve složce Forms měl samé formuláře, jeden by chyběl a místo něho by byla komponenta, ale to by byla asi nejlepší varianta.
Nebo nějaká lepší cesta?
- Zax
- Člen | 370
Obecně formuláře by se neměly tvořit poděděním UI\Form. Lepší je vytvořit si komponentu a ten formulář vyrobit v ní. Továrnu na komponentu zaregistruješ jako službu, injectneš do presenteru a je to.
class MujBezvaForm extends UI\Control {
function createComponentForm() {
$form = new UI\Form;
...
}
}
Editoval Zax (22. 9. 2014 21:10)
- Šaman
- Člen | 2666
Zax napsal(a):
Obecně formuláře by se neměly tvořit poděděním UI\Form. Lepší je vytvořit si komponentu a ten formulář vyrobit v ní.
S tím nesouhlasím, oba přístupy mají své místo na slunci. Vytvářet formulář jako komponnety je jednodušší na použití, ale mít továrnu přímo na Form se může hodit, pokud se od toho formuláře bude dál dědit, nebo jinak používat. Třeba BookForm (formulář) a s jeho pomocí NewBookFormControl a EditBookFormControl. Takže znovupoužitelné formuláře rozhodně ničím neobalovat, obalovat až finální jednoúčelový formulář.
- Vojtěch Dobeš
- Gold Partner | 1316
Na to, co popisuješ, se zase lépe hodí továrnička na
BookForm
, kterou si jako závislost můžu předat jak do
NewBookFormControl
, tak do EditBookFormControl
.
- Zax
- Člen | 370
@Šaman já třeba tento typ formulářů (přidávací a editační) řeším abstraktní komponentou, kde mám veškerý společný kód, a co se liší, to vyčlením do abstraktních metod, které si pak doplním v konkrétní komponentě (typicky se liší popisek pro potvrzovací tlačítko a flashMessage). Jinak továrna na form samozřejmě použít jde, proti tomu žádná, ale není to úplně odpověď na původní dotaz.
Když použije komponentu, docílí toho, že si může „vykreslení formuláře udělat bokem (v jiné šabloně) a pak to jen jedním řádkem v šabloně (presenteru) zavolat“. Jestli si ten formulář napíše přímo v komponentě nebo jestli si to vyrábění vyčlení do samostatné továrny, kterou si pak injectne a jen zavolá create(), to už je na něm, já jen předložil nejjednodušší řešení jeho problému.
A BTW vyrábění továrnou nemá nic společného s děděním UI\Form.
Editoval Zax (22. 9. 2014 22:12)