časté používání getParam()

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

Pěkný den,

zajímalo by mě, jak moc je v souladu s návrhem nette následující postup používání getParam():

řekněme, že mám view se seznamem uživatelů, a u každého je možnost jeho editace, což mě přesměruje na: {link editUser $user_id}. Na view editUser mám formulář, pomocí kterého uživatele edituji. Tím pádem si v továrničce formuláře zadám $this->getParam($user_id), a na základě toho vyrenderuju hodnoty polí(stejně tak při odeslání upravím data tohoto uživatele). Vím, že si můžu vytvořit novou komponentu a dát jí parametr do metody render(např. render($user_id), tedy ze šablony volána jako {widget editUser $userId}), ovšem mám podobných formulářů v aplikaci hodně, a nechci pro každý dělat novou komponentu.

Jak by se tohle mělo v nette řešit?

Ondřej Mirtes
Člen | 1536
+
0
-

Na volání $this->getParam(‚foo‘) v továrničce je nepěkné to, že nijak nezabráníš tomu, aby se ta komponenta vytvořila i v jiné akci toho Presenteru, kde ovšem žádný parametr $foo neexistuje.

Předávání parametru do metody render není vhodné, protože pak při zpracování signálů o tom parametru komponenta neví a nemůže s ním pracovat.

Řešením je nastavovat tyto parametry v metodě action. Platí to i třeba právě pro volání setDefaults nad formulářem.

public function actionEdit($id)
{
  $this['userControl']->userId = $id;
}

protected function createComponentUserControl()
{
  return new UserControl;
}