Kam s redirect a flashMessage?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Svaťa Šimara
Člen | 98
+
0
-

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
+
0
-

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 :-)

Svaťa Šimara
Člen | 98
+
0
-

Dík za odpověď.