[Formular ako komponeta] nastavenie setDefaults az na konci formulara
- duskohu
- Člen | 778
Zdravim, nevedeli by ste mi poradit? Mam formular ako komponentu v ktorej
definujem len telo formulara, odosielacie tlacitko, setDefaults a onSuccess.
Prvky formulara naplnam az v tovarnicke presenteru.
Problem je v tom ze komponenta si sama zisti defaultne hodnoty a kedze prvky
formulara pridavam az v tovarnicke tak v komponente nema comu nastavit tieto
hodnoty. Ako by som vedel prvky formulara pridat skor ako nastavim
setDefaults()?
Komponenta
class FilterFormControl extends UI\Control {
private function getDefaults() {
return $this->ziskajDedaults();
}
protected function createComponentForm() {
$form = new Form;
$form->addSubmit('ok', 'Ok');
$form->setDefaults($this->getDefaults());
$form->onSuccess[] = callback($this, 'filterSubmitted');
return $form;
}
}
Presenter
protected function createComponentFilter($name) {
$control = new \FilterFormControl($this, $name);
$form = $control['form'];
$form->addText('prvok', 'Popis');
return $control;
}
- Jirda
- Člen | 103
duskohu napsal(a):
Zdravim, nevedeli by ste mi poradit? Mam formular ako komponentu v ktorej definujem len telo formulara, odosielacie tlacitko, setDefaults a onSuccess. Prvky formulara naplnam az v tovarnicke presenteru.
Problem je v tom ze komponenta si sama zisti defaultne hodnoty a kedze prvky formulara pridavam az v tovarnicke tak v komponente nema comu nastavit tieto hodnoty. Ako by som vedel prvky formulara pridat skor ako nastavim setDefaults()?Komponenta
class FilterFormControl extends UI\Control { private function getDefaults() { return $this->ziskajDedaults(); } protected function createComponentForm() { $form = new Form; $form->addSubmit('ok', 'Ok'); $form->setDefaults($this->getDefaults()); $form->onSuccess[] = callback($this, 'filterSubmitted'); return $form; } }
Presenter
protected function createComponentFilter($name) { $control = new \FilterFormControl($this, $name); $form = $control['form']; $form->addText('prvok', 'Popis'); return $control; }
Proc si to nerozfazujes tak, ze az kdyz nadefinujes ty prvky formulare, tak pak das pokyn k tomu, aby se nastavili default hodnoty. Takova metoda by pak mohla umoznit treba definovat ty default hodnoty z venku nebo v pripade null argumentu, automaticky z toho tveho getDefaults. Nebo snad vzdy nastane pro ten form situace, ze mu potrebujes nastavit nejaky default hodnoty?
- David Zadražil
- Člen | 62
Po tomhle řádku:
$form->addText('prvok', 'Popis');
Zkus dát:
$this['form']->setDefaults(defaultníHodnotyTady);
- duskohu
- Člen | 778
to funguje, len neviem ako to urobit aby som mal v komponente:
$form->addSubmit('ok', 'Ok');
$form->setDefaults($this->getDefaults());
$form->onSuccess[] = callback($this, 'filterSubmitted');
a v presenteri len pridal ostatne formularove prvky
Uvazoval som:
v komponente:
public function finishForm() {
$this['form']->setDefaults($this->getData());
$this['form']->addSubmit('filter', 'Filter');
}
a potom v presenteru
protected function createComponentFilter($name) {
$control = new \FilterFormControl($this, $name);
$form = $control['form'];
$form->addText('prvok', 'Popis');
$control->finishForm(); // pridam na koniec formulara co potrebujem
return $control;
}
ale chcelo by cistejsi sposob.
- Nox
- Člen | 378
A co kdyby presenter předal té komponentě do konstruktoru či setterem (tady asi vhodnější setter), ty defaultní hodnoty a ten by si je uložil do property a pak je použil … ?
Mj. to přidávání prvků do formuláře komponenty mi přijde stejně nečisté, imho by definice formuláře neměla být roztříštěná všude možné po presenterech…
- duskohu
- Člen | 778
Nox napsal(a):
A co kdyby presenter předal té komponentě do konstruktoru či setterem (tady asi vhodnější setter), ty defaultní hodnoty a ten by si je uložil do property a pak je použil … ?
Mj. to přidávání prvků do formuláře komponenty mi přijde stejně nečisté, imho by definice formuláře neměla být roztříštěná všude možné po presenterech…
Lenze komponenta si defaultne hodnoty zistuje sama, nepredava jej ich presenter (tato funkcionalita pripada komponente), to by som si vytiahol defaultne hodnoty od komponenty v presenteru a potom ich zase komponente predal? Definicia formulara je rozsiritelna preto lebo nepozna dopredu ake bude mat prvky je to filter a tie definuje presenter take ake potrebuje.
- Jirda
- Člen | 103
duskohu napsal(a):
Nox napsal(a):
A co kdyby presenter předal té komponentě do konstruktoru či setterem (tady asi vhodnější setter), ty defaultní hodnoty a ten by si je uložil do property a pak je použil … ?
Mj. to přidávání prvků do formuláře komponenty mi přijde stejně nečisté, imho by definice formuláře neměla být roztříštěná všude možné po presenterech…
Lenze komponenta si defaultne hodnoty zistuje sama, nepredava jej ich presenter (tato funkcionalita pripada komponente), to by som si vytiahol defaultne hodnoty od komponenty v presenteru a potom ich zase komponente predal? Definicia formulara je rozsiritelna preto lebo nepozna dopredu ake bude mat prvky je to filter a tie definuje presenter take ake potrebuje.
Paklize komponenta nemuze predem znat definici formulare, tak jak by pak mela znat predem defaultni hodnoty pro ten neznamy formular?
Jak jsem psal s tou metodou, myslel jsem to same, co nekteri vyse. Ze proste za definici zavolas setDefault. Jeste me napadlo, zda by to neslo zavolat treba tak, ze by to bylo volane z renderu, ktery bude vyvolan v te komponente, ale tady si nejsem jisty zivotnim cyklem, takze je to spis jen rada ke zkousce.
Kazdopadne si myslim, co vetsina ostatnich, ze to neni zrovna hezky navrh.