Formulář – továrna na prvky formuláře
- BigCharlie
- Člen | 284
Ahoj,
zajímá mě, jak řešíte následující situaci: V aplikaci řada formulářů, každý jako komponenta. V několika formulářích používám naprosto totožný prvek, něco takovéhoto:
$form->addCheckboxList('options', 'Varianty', $this->someFacade->getOptions());
Každý formulář, který obsahuje tenhle list, je tedy závislý na
someFacade
. Pokud mám takových prvků víc, roste analogicky
počet závislostí (zatím jsem se dostal na cca šest).
Co by se mi líbilo – mít společného formulářového předka (už ho stejně mám) a v něm nějakou „továrničku“, která by prvek vytvořila a dodala mu potřebné závislosti. A v konkrétním formuláři už bych jen použil
$form->addMyOptions('options', 'Varianty');
Jedním řešením je mít nějakou „fasádu, plnící formuláře“, do
které bych koncentroval všechny ty getSomeData
. Z nějakého
důvodu se mi to moc nepozdává.
Jdu na to zcela blbě? Jak to řešíte vy?
- David Kregl
- Člen | 52
Ahoj,
napadá mě si do globální proměnné uložit result z
$this->someFacade->getOptions().
A ten pak použít.
- Jan Mikeš
- Člen | 771
Pokud stejny prvek vyuzivas opravdu casto na ruznych mistech, muzes vyuzit napr tento koncept:
// FormFactory.php
$this->myInputService->addOptions($form, "options", "Varianty");
// MyInputService.php
private $someFacade; // Pres konstruktor
public function addOptions(Forms\Form $form, $name, $label)
{
$form->addCheckboxList($name, $label, $this->someFacade->getOptions());
}
Dalsi napad… mozna trosku zretelnejsi na prvni pohled pro nekoho, kdo nevi jak aplikace funguje:
// FormFactory.php
$form["options"] = $this->myInputService->getOptionsCheckboxList("varianty");
// MyInputService.php
public function getOptionsChecboxList($label)
{
return new Controls\CheckboxList($label, $this->someFacade->getOptions());
}
A posledni z rady mych napadu https://api.nette.org/…ect.php.html#… ale do toho bych se osobne nepoustel, vyse zminena reseni jsou imho cistejsi
Editoval Lexi (6. 8. 2015 20:46)
- BigCharlie
- Člen | 284
@DavidKregl: brr, to vypadá hodně odpudivě. Závislost na globální proměnné by ti fakt nevadila?
@Lexi: Aha, šel jsi o krok dál – služba, plná továrniček na opakující se prvky formuláře. To by mohla být cesta. Kouknu na to.
Používá někdo elegantnější přístup?
- Jan Mikeš
- Člen | 771
@BigCharlie presne tak, zalezi kolik tech prvku budes mit, take jestli budes mit vsechny prvky sjednocene v jedne tride (1 formularovy prvek == 1 metoda) protoze pri vyssim poctu prvku ti ta trida muze celkem slusne narust, pro nejake opravdu slozite prvky klidne samostatnou tovarnicku, ve ktere by probihala i logika vypoctu atd, prakticky vse co je s timto formularovym prvkem spojeno (prevest sem nejakou zodpovednost z fasady).
Nebo pak jak jsem psal, pres extensionMethod si vytvaret vlastni formularove prvky (ale jak jsem zminil, toto reseni mi pro tuto situaci uplne nesedi).
- BigCharlie
- Člen | 284
Těch opakujících se prvků, které mají nějakou závislost, mám cca 5. Jsou to typicky nějaké selecty na uživatele apod.
Takže by to mohla být cesta.