Více variant jednoho formuláře
- kleinpetr
- Člen | 480
Ahoj,
řeším takovou otázku jak nejlépe pracovat s více varianty formuláře. Mám např. nějaký editační form, ale potřebuji ho třeba na 4 varianty a teď mě napadlo více způsobů, ale moc se mi to nelíbí.
1. možnost
vytvořit zvlášť presenter a v něm metoda default() varinata1() varinata2()
varianta3().
metoda default rozpozná podle id od jaký typ záznamu se jedná a zavolá
např. forward příslušné varianty. To je dobré v tom, že budu mít pro
každou variantu zvlášť templatu, jelikož používám manuální rendering.
Musím ale v presenteru vytvořit komponentu ke každé variantě formuláře
tudíž createComponentVarianta1Form() …, …, …, a v každé té šabloně
si pak vzít potřebný form. To se mi nelíbí v tom, že musím psát pro
každou variantu zvlášť formulář (časté opakování kódu) a vtom, že ve
finále je presenter hodně obsáhlý.
2. možnost
vytvořit jeden formulář, kterému předám id záznamu a on už vše
vytvoří uvnitř sebe a vrátí potřebný form. To je skoro stejné jen bych
musel navěsit na každou variantu button s nějakým callbackem, tady se mi
zase nelíbí, že to bude sice v jednom souboru, ale chaotické.
3. možnost
vytvořit jeden formulář, který bude obsahovat úplně vše a
v jednotlivých metodách z něho odebírat.
Jedna věc je jakým způsobem řešíte obsluhu více variantového
firmuláře a druhá jeho tvorba :)
Budu rád za všechny tipy a rady
- CZechBoY
- Člen | 3608
Já si udělám fasádu na ten form a případně přidávám políčka.
class UserFacade
{
public function createRegisterForm ()
{
$form = $this->factory->create();
$form['heslo']->setRequired('Heslo je povinné');
$form->onSuccess[] = [$this, 'registerSucceeded'];
return $form;
}
public function createEditForm ($id_user)
{
$form = $this->factory->create();
$form->addHidden('id')->setValue($id_user);
$form->onSuccess[] = [$this, 'editSucceeded'];
return $form;
}
}
- pcs
- Člen | 22
CZechBoY napsal(a):
Já si udělám fasádu na ten form a případně přidávám políčka.
class UserFacade { public function createEditForm ($id_user) { $form = $this->factory->create(); $form->addHidden('id')->setValue($id_user); $form->onSuccess[] = [$this, 'editSucceeded']; return $form; } }
Jak pak tuhle funkci zavolám? Já normálná používám
protected function createComponentEditForm() {
...
}
a to mohu zavolat v latte pomocí
{control editForm}
ale nevím jak volat tvojí funkci a předat jí parametr.