GET parametry – kontrola před vstupem do akce presenteru
- Bilbo
- Člen | 16
Hele, takový dotaz, hledal jsem po fóru, ale nikde jsem nenašel přesně to, co potřebuji – předem všem děkuji za laskavé odpovědi :-)
Když mám GET parametry, které patří k nějaké akci presenteru, jaké
je nejlepší řešení, jak tyto parametry odchytit a zkontrolovat, zda nejsou
podvržené, ještě před vstupem do akce (ideálně to unifikovat pro
všechny – čili odchytit si to v BasePresenteru) ?
Jedná se mi o nějaké pěkné podporované řešení (jestli existuje),
samozřejmě bych si to mohl po odchycení ukládat někam do atributů ve
třídě nebo Enviroment, ale nevím, jestli je to vhodné…
Př.: Mám třeba naroutovanou URL – „http://webserver/presenter/action/1/2“
První číslo vzadu je ID, druhé je page (tyto dva parametry budou hodně časté pro spoustu akcí, takže proto to chci nějak standardizovat). A aby mi tam někdo nepsal nesmysly, které pak budou zbytečně v API pracovat s databází…
Zatím jediné, na co jsem přišel, bylo tohle, ale ztroskotá to na metodě setParams() – viz komentáře v kódu.
class BasePresenter extends xxx {
public function beforeRender()
{
$params = $this->getRequest()->getParams();
$params['id'] = is_numeric($params['id']) ? $params['id'] : 0;
$params['page'] = is_numeric($params['page']) ? $params['page'] : 0;
// Tohle mi vyhazuje výjimku Nette\InvalidStateException
// Cannot modify a frozen object Nette\Application\Request
// $this->getRequest()->setParams($params);
}
}
class Presenter extends BasePresenter {
public function renderAction($id,$page)
{
// V tomto bodě už bych chtěl mít nějak $id a $page v parametrech zkontrolované a případně opravené.
}
}
- voda
- Člen | 561
Podívej se na vlákno Validace parametrů v presenterech, možná tam najdeš něco užitečného.