časté používání getParam()
- Kaja
- Člen | 6
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
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;
}