Skládání formulářových prvků

libik
Člen | 96
+
0
-

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 | 758
+
0
-

@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 | 758
+
0
-

@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');
	}
libik
Člen | 96
+
0
-

Díky, asi půjdu cestou dědění.

L.