Redirect formulára v prezenteri
- orech
- Člen | 40
Zdravím všetkých,
postupoval som podľa tohto návodu pre
vytvorenie formulára ako komponentu a následné presmerovanie cez
Presenter
na detail.
Component
:
public $onFormSave;
protected function createComponentForm()
{
$form = new Form();
/* ... vytvorenie samotného formu */
$form->onSuccess[] = callback($this, 'formSubmitted');
return $form;
}
public function formSubmitted(Form $form)
{
$object = new \Object();
/* ... vytvorenie a ulozenie objektu */
$this->onFormSave($form, $object);
}
Presenter
:
protected function createComponentFormComponent()
{
$component = $this->formComponentFactory->create();
$component->onFormSave[] = function($form, $object) {
if (!$form->hasErrors()) {
$this->redirect(':App:Homepage:detail', array('id' => $object->id));
}
};
return $component;
}
V Presenter
i som kontroloval objekt a vracia svoje ID.
Formulár sa odošle, objekt sa uloží, zavolá sa aj onFormSave
inicializovaná v Presenter
i, no $this->redirect(‚…‘)
je mŕtve.
- David Kudera
- Člen | 455
nemáš to třeba obalené celé v try catch, který chytá
Exception
?
Jinak osobně mám spíš nějaký onFormSuccess
, abych nemusel
v presenteru testovat jestli nemá form chyby.. A vlastně form nepředávám
potom do takové události vůbec, jen tu novou entitu.
Editoval David Kudera (16. 7. 2015 12:15)
- David Matějka
- Moderator | 6445
- nette redirect vyvolava AbortException, tak proto ti to nefunguje
- (skoro) nikdy nechytej vsechny vyjimky – chytej pouze ty, ktere vis, ze mohou nastat, a umis je spravne osetrit
- David Matějka
- Moderator | 6445
@orech InvalidArgumentException je zrovna ten druh chyby, ktery bys mel odchytavat minimalne – jedna se o potomka LogicException, ktere rikaji, ze neco spatne pouzivas.. vice v prednasce Honzy Tvrdika https://www.youtube.com/watch?…