Kam s redirect a flashMessage?
- Svaťa Šimara
- Člen | 98
Ahoj,
mám pouze jedno místo pro vykreslování flashMessage v @layout.
Pak komponentu newArticleForm, kterou chci uložit.
Zajímá mě, kam bych měl dát volání flashMessage a redirect?
Aktuální řešení:
presenter:
<?php
public function saveNewArticle(Form $form){
try{
$this['newArticleForm']->save($form);
}catch(\OneException $e){
$this->flashMessage('Jedna chyba');
return;
}
$this->flashMessage('Nový článek byl úspěšně přidán', 'success');
$this->redirect('Articles:');
}
?>
komponenta NewArticleForm:
<?php
public function createComponentForm(){
$form = new Form();
...
$form->onSubmit[] = callback($this->getPresenter(), 'saveNewArticle');
return $form;
}
public function save(Form $form){
$this->model->create($form->getValues());
}
?>
Což by se ovšem dalo přepsat pouze do NewArticleForm:
<?php
public function createComponentForm(){
$form = new Form();
...
$form->onSubmit[] = callback($this, 'save');
return $form;
}
public function save(Form $form){
try{
$this->model->create($form->getValues());
}catch(\OneException $e){
$this->getPresenter()->flashMessage('Jedna chyba');
return;
}
$this->getPresenter()->flashMessage('Nový článek byl úspěšně přidán', 'success');
$this->getPresenter()->redirect('Articles:');
}
?>
Které z těchto dvou řešení je vhodné použít nebo úplně nějaké jiné?
V současnosti využívám 1. řešení. Zdá se mi intuitivnější flashMessage pro presenter nastavovat v presenteru a také přesměrování provádět též v presenteru. Má to ale vadu na kráse – 2. řešení se mi zdá pěknější ;-)
- Patrik Votoček
- Člen | 2221
Použil bych určitě 2. řešení a to proto, protože můžeš chtít v aplikaci používat stejný formulář na dalším (jiném) místě.
Jinak $this->getPresenter()->flashMessage('Jedna chyba');
bych zaměnil spíše za $form->addError('Jedna chyba');
.
PS: je hezké vidět že taky někdo pracuje s vyjímkami :-)