Předávání argumentu (pole z db) do komponenty v multiplieru
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Thommie
- Člen | 34
Ahoj,
mám formulářovou komponentu v multiplieru
protected function createComponentFormKategorie() {
try {
$seznam_kategorii = $this->produktyManager->seznamKategoriiNazvy();
$multi = new Multiplier(function($idKat, $seznam_kategorii) {
return $this->formKategorieFactory->create($idKat, $seznam_kategorii);
});
} catch(\Nette\Application\AbortException $el) {
throw $el;
} catch (Exception $e) {
$this->flashMessage($e->getMessage(), "chyba");
}
return $multi;
}
a potřebuji jí předat obsah, který se tahá z db, pro html select. Dotaz nechci dát dovnitř komponenty, abych při každé iteraci multiplieru neměl zbytečný dotaz na db, když jde pořád o ta samá data. Dá se to do té komponenty předat nějak z vnějšku, abych dotaz pokládal jen jednou? To, co mám v kódu, nepoužije proměnou $seznam_kategorii – IDE mi píše „out of the scope“. To chápu, ale je nějaký způsob, jak to udělat?
Díky za pomoc
Editoval Thommie (9. 1. 2018 19:29)
- Felix
- Nette Core | 1247
Mas spatne zapis.
$multi = new Multiplier(function($idKat) use ($seznam_kategorii) {
return $this->formKategorieFactory->create($idKat, $seznam_kategorii);
});
Viz PHP dokumentace: http://php.net/…nonymous.php#…
- David Matějka
- Moderator | 6445
mimochodem, cele chytani vyjimek je spatne
- je v prvni rade zbytecne, jedine misto, kde muze dojit k vyjimce, je „seznamLategoriiNazvy“, chyba, ke ktere by doslo ke komponente, zde nebude odchycena
- (temer) vzdy bys mel chytat konkretni vyjimky, u kterych vis, ze mohou nastat – nikoliv tedy obecnou Exception
- uzivateli bys nikdy nemel zobrazovat zpravu z vyjimky, muze obsahovat citlive udaje
- a hlavne – takovymhle chytanim vyjimky ji zabranis pred jakymkoliv
logovanim. takze kdyz uz neco chytas, tak tu vyjimku i zaloguj
pres
Tracy\Debugger::log