Presenter argument type error

glaseja1
Člen | 2
+
0
-

Ahoj. Mam Presentery, ktere berou jako arguemnt page, a nekdy i searchArgs
Validuji typ takto:

public function renderDefault($page, $searchArgs)
    {
        if(!is_int($page))
          $page = 1;
		if(!is_array($searchArgs))
          $searchArgs= [];
		...
    }

To je ale dost problematicke delat v kazdem presenteru, a kdyz specifikuji typ

public function renderDefault(int $page = 1, array $searchArgs = [])
    {
    }

Tak to lze shodit tim, ze tam narvu spatny typ, tedy napr. pristupem na

url?page='abc'

Chci se zeptat, nevite, prosim, o nejakem elegantnim reseni, nez vsude davat manualni testy viz vyse? Jedine co mne napada, je dat manualni testy do base presenteru, ale pak by vsechny presentery musely mit stejny pocet argumentu, a stejne, pokud bych zapomel zavolat

parent::renderDefault(&$page)

tak uz to bude zase hazet chybu.

Dekuji moc

F.Vesely
Člen | 368
+
+1
-

A to je problem, ze to lze shodit tim, ze tam narves spatny typ?

glaseja1
Člen | 2
+
0
-

No, spise by mne zajimalo, zda existuje zpusob, jak to napsat tak, aby at tam dam jako vstup cokoli, aplikace nespadla. (neco inteligentnejsiho nez try-catch)…(preci jen nechci mit hromadu takovychto chyb v logu, a rad bych mel kod cisty a osetreny…)

Marek Bartoš
Nette Blogger | 1161
+
0
-

Mám dojem, že pokud tam pošleš špatný typ, tak to skončí na BadRequestException, která se ti v produkčním módu (catchExceptions) nezaloguje.