Ako dostat values z formFactory do presentera?
- marioff
- Člen | 69
Caute, nejak som sa pomotal a neviem s toho von :D
mam AbstractFormFactory:
public function create($entity, Form $form = NULL)
{
...
$form->onSuccess[] = $this->process;
...
return $form;
}
/**
* @param Form $form
*/
public function process(Form $form)
{
$values = $this->normalize($form->getValues()); // tu si znormalizujem data
/*... TU POTREBUJEM ODOSLAT DATA DO PRESENTERU ...
napr. */
$form->onSuccess($values);
}
a v presenteri:
protected function createComponentUserForm()
{
$form = $this->userFormFactory->create($this->myUser->contact);
$form->onSuccess[] = function($values) {
try {
... TU SA POSLU DATA DO FACADE NECH SA POSTARA ON ...
} catch (\ModelException $e) {
$this->flashMessage($e->getMessage(), 'danger');
}
$this->redirect('this');
};
return $form;
}
lenze tento sposob mi tym padom zavola aj metodu process …
ako by som mal idealne ziskat uz znormalizovane data do presenteru? dik za akukolvek radu
EDIT: pokial je to v tomto stave, vrati mi Recoverable Error v metode AbstractFormFactory->process (array given – to je vysledok AbstractFormFactory->normalize)
Editoval marioff (21. 1. 2015 22:43)
- marioff
- Člen | 69
oki , asi nik nevie :)
ja to mam vyriesene zatial tak, ze mam udalost vo userFormFactory a v metode process zavolam ju.. a tym padom v createComponent…() bude:
$form = $this->userFormFactory->create($this->myUser->contact);
$this->userFormFactory->onVsetkoJeOk[] = function($values) {
lenze toto riesenie sa mi vobec nepaci :(
- bazo
- Člen | 620
cele zle. FACADE si injektni do tej komponenty. data z formularu spracuj vo
funkcii process.
v komponente si vytvor property $onSuccess = []. nepliest s onSuccess
formulara
k tejto property moze pristupovat presenter. do tohto onSuccess callbacku si
posli vysledok spracovania dat fasadou z komponenty
tvoj priklad nema vobec zmysel. to uz mozes mat ten formular rovno v presenteri a komponentu nepotrebujes. zmysel obalovania formularov do komponent je ten, ze uz si komponenta sama rovno spracuje aj hodnoty z formu, cize presenter neobsahuje ziadne dalsie zavislosti potrebne na toto spracovanie, ale len tovarnicku na vyrobu tejto komponenty.
- marioff
- Člen | 69
formular nemozem mat v presenteri, lebo sa moze ten isty pouzit aj inde.. a fasadu tak ci tak potrebujem mat injektnutu aj v presenteri, lebo od nej berem dalsie udaje na zobrazenie
preto som sa to tak snazil vyriesit, aj ked asi fakt trochu nelogicky…
sry za blbu otazku ale mozem v komponente po uspesnom (resp. neuspesnom, po zachyteni vynimky) ulozeni dat vypisat flash spravu a presmerovat? nepotrebujem nato presenter?
- Ot@s
- Backer | 476
marioff napsal(a):
sry za blbu otazku ale mozem v komponente po uspesnom (resp. neuspesnom, po zachyteni vynimky) ulozeni dat vypisat flash spravu a presmerovat? nepotrebujem nato presenter?
V komponentě máš k dispozici $this->presenter
. Nech se
ale raději inspirovat formulářem
v UI\Control
- Oli
- Člen | 1215
Presenter na to nepotřebuješ, ale je to s ním pohodlný. Potřebuješ ho ale trochu jinak, než jsi ho použil ty.
public function process(Form $form)
{
$values = $this->normalize($form->getValues()); // tu si znormalizujem data
$this->presenter->flashMessage('Data byla úspěšně uložena');
$this->presenter->redirect('Presenter:action');
// Pokud chceš přesměrovat na tu samou stránku, tak presenter nepotřebuješ
$this->redirect('this');
}
To o co se snažíš ty je, že každý presenter, kam je připojená komponenta si může přesměrovat kam chce a napsat flash jakou chce (případně udělat jakékoli dodatečné úpravy).
// komponenta
public $onSuccess = [];
public function process(Form $form)
{
$values = $this->normalize($form->getValues()); // tu si znormalizujem data
$this->onSuccess($this, $values);
}
// presenter1
protected function createComponentUserForm()
{
$form = $this->userFormFactory->create($this->myUser->contact);
$form->onSuccess[] = function(AbstractFormFactory $factory, $values) {
$this->flashMessage('Prsenter 1 úspěšně uložil data');
$this->redirect('Presenter1:akce1');
};
return $form;
}
// presenter2
protected function createComponentUserForm()
{
$form = $this->userFormFactory->create($this->myUser->contact);
$form->onSuccess[] = function(AbstractFormFactory $factory, $values) {
$this->flashMessage('Prsenter 2 úspěšně uložil data');
$this->redirect('Presenter2:akce2');
};
return $form;
}