Kontrola vstupu – kde se má provést?

rosakovnik
Člen | 13
+
0
-

Zdravím,

mám takový dotaz, na který jsem kupodivu nenašel nikde uspokojující odpověď.

Vytvořil jsem nákupní košík. Mám v databázi tabulky meal a ingredient.
Mám presenter, který má umožnit upravit objednané jídlo tak, že můžeme libovolně přidávat ingredience do jídla (případně je zase odebírat pryč)

V tomto presenteru mám funkci handleAddExtraIngredient($mealId, $ingredientId, $amount).

Moje otázka zní, kde mám vlastně provést kontrolu, jestli $mealId existuje v databázi a zda-li existuje $ingredientId?

Měl bych to udělat v presenteru, tedy v handleAddExtraIngredient, že bych přes model zavolal například $productManager->getMeal($mealId), zjistil jestli mi to vrátilo výsledek a až poté zavolal $orderManager->updateIngredient($mealId, $ingredientId, $amount), která bude počítat s tím, že mu dáváme korektní vstup s existujícími jídly a ingrediencemi

anebo bych měl v handle zavolat rovnou updateIngredient, která by zjišťovala, jestli obdržela korektní vstup?

Pokud je odpověď, že by se validace měla provádět v handle, tak mám doplňující otázku, zda-li je v pořádku, pokud bych do modelu, tedy do funkce updateIngredient rovnou předal ActiveRow, který mi vrátil $productManager->getMeal($mealId), abych Tím zamezil například opakovanému dotazu do databáze v rámci jednoho requestu?

Mockrát děkuji za jakoukoliv odpověď, snad jsem problém popsal srozumitelně.

Děkuji

CZechBoY
Člen | 3608
+
+1
-

Asi bych to dal do modelu at to můžeš vyuzit i mimo presenter (napr. konzolove prikazy).

suwer
Člen | 33
+
+3
-

Bez cestou nejmensiho odporu. V te DB vazebni tabulce si spravne nastav constraints (cizi klice). Pri nevalidnim zapisu to pak snadne. Pokud pouzivas Nette Database, dostanes zpatky exception.