GET parametry – kontrola před vstupem do akce presenteru

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

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

Podívej se na vlákno Validace parametrů v presenterech, možná tam najdeš něco užitečného.

Bilbo
Člen | 16
+
0
-

Děkuji moc :-)

Editoval Bilbo (2. 7. 2011 20:49)