flash message vyvolané v modelu model

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

Mám menší problém,

nevíte, jak mám udělat, aby se vypsala chyba už v modelu ? ..resp, jestli nemá někdo už vytvořenou nějakou třídu, která sbírá automaticky nějaká hlášení v modelu a předává je do presenteru, kde jednou metodou se tyhle oznámení/chyby vypíší.

Nox
Člen | 378
+
0
-

Buď předat nějaký jiný model co to bude shromažďovat, nebo v poslední době mě láká myšlenka sem tam použít nějaký Result objekt (podobně jako je Http Response), který zapouzdří info a výsledek proběhlého procesu a jedno z toho by bylo pole s chybami (možností je samozřejmě víc, předat callback, předat presenter, shromažďovat si pole s chybami atd., ale to se mi až tak nepozdává)

Editoval Nox (1. 5. 2013 13:15)

Marek Šneberger
Člen | 130
+
0
-

Nebylo by lepší / čistější si v presenteru odchytávat nějakou vyjímku z modelu, a v presenteru s ní pracovat?

Draffix
Člen | 146
+
0
-

Nebo to vyřešit pomocí vlastních výjimek a ty si pak odchytit v nějaké třídě a podle toho reagovat? Nicméně toto řešení se mi zdá nejvhodnější.

Nox
Člen | 378
+
0
-

To mě napadlo nejdřív taky, jenže co když chci výjimku jen zaznamenat ale pokračovat dál?

Například: zpracovávám 10 nezávislých úloh vybraných dle určité logiky, u jedné vypadne spojení s DB (runtime exception), ale já bych radši, aby se dokončilo aspoň těch 9, když to jde.

Udělat by to asi šlo, ale v presenteru už by musela být určitá business logika, která by umožnila process od správného místa znovu spustit, nebo něco takovýho.

llook
Člen | 407
+
0
-

Model by měl být nezávislý na tom, jak ho view bude prezentovat, tzn. v modelu nejsou žádné flash messages, žádné chyby formuláře apod.

To s těmi 10 úlohami bys mohl udělat třeba tak, že modelová metoda pro jejich spuštění by vracela nějaký results objekt, ze kterého by se uživatel modelu (tj. presenter) dověděl, jak to dopadlo. Cca takhle:

public function renderDesetUloh()
{
	$result = $this->model->runTenTasks();
	if ($result->numberOfFailed > 0) {
		$this->flashMessage("Bohužel $result->numberOfFailed úloh z $result->numberOfTasks selhalo.");
	}
	else {
		$this->flashMessage("Všech $result->numberOfTasks proběhlo OK.");
	}
}
Nox
Člen | 378
+
0
-

Což už jsem navrhoval ve #2 :) Je pravda že to „pole s chybami“ může svádět k házení exception messages do flash messages, to by se pak asi mělo ještě nějak jinak zpracovat

Editoval Nox (1. 5. 2013 17:35)

wasek2611
Člen | 17
+
0
-

Díky všem za odpověď, nakonec jsem v modelu vyhodil výjimku a v presenteru odchytil..až teď jsem si uvědomil, že dotaz byl zařazen do špatné sekce, nebylo to ani tolik o Nette, jako spíš o OOP a odchytávání výjimek.