Skládání formulářových prvků
- libik
- Člen | 96
Ahoj,
mám dotaz, a omlouvám se, jestli blbý. Vytvářím formuláře, jejichž prvky potřebuju měnit podle toho, jak potřebuju. To znamená, že mám formulář, který obsahuje inputy jméno a příjmení, ale ty další se již můžou měnit, podle toho k čemu ten formulář potřebuju.
Můžu to v továrně v jednom formuláři všechno zaIFovat, nebo můžu vytvořit tolik formulářů, kolik potřebuju, ale budu se opakovat se jménem a příjmením… Neexistuje nějaký elegantnější způsob?
public function createForm()
{
$form = $this->formFactory->create();
$zakaznik = $form->addContainer('zakaznik');
$zakaznik->addText('jmeno', 'Jméno');
$zakaznik->addText('prijmeni', 'Příjmení');
if(Form 2)
$zakaznik->addText('firma', 'Název firmy');
}
Form 1
- jmeno
- primeni
Form 2
- jmeno
- primeni
- firma..atd
Form 3
- jmeno
- primeni
- bankovni udaje ..atd
Díky za případné nasměrování.
L.
Editoval libik (29. 12. 2023 10:52)
- m.brecher
- Generous Backer | 863
@libik
Měl jsem v jednom projektu také takový složitý formulář – rezervace pro velké množství akcí různého typu, kdy formulář obsahoval některé inputy stejné – jméno, příjmení a email a ostatní inputy byly pokaždé jiné. Cca 9 variant rezervačního formuláře. Tohle se nejlépe řeší v databázi, v kódu je to nepřehledné a obtížně se to udržuje. V Tvém případě záleží na tom, jaký je celkový kontext těch formulářů. Já jsem ve formuláři definoval všechny virtuálně potenciální skupiny inputů, které by tam mohly být a zapsal je jako typy do databáze. K akci každého typu se v databázi definovaly skupiny, které by ve formuláři měly být a factory formuláře potom podle databáze generovala formulář. Když potom v provozu docházelo ke změnám, tak se pouze měnily data v databázi.
- m.brecher
- Generous Backer | 863
@libik
Můžeš to řešit i společným předkem factory, který by předpřipravil ty společné inputy:
public function createForm()
{
$form = $this->baseFormFactory->create(); // tady si předpřipravíme společné inputy 'jmeno' a 'prijmeni'
$zakaznik->addText('prijmeni', 'Příjmení');
if(Form 2)
$zakaznik->addText('firma', 'Název firmy');
}