Sdílení informací v rámci Presenteru
- microcz
- Člen | 62
Omlouvám se za dnešní záplavu začátečnických otázek :o)
V rámci jednoho presenteru mám
- metodu renderDetail, která připraví data pro šablonu s detailem objednávky
- několik „create“ metod, které získávají data pro komponenty zobrazované na stránce
- několik „handle“ metod, které obsahují akce jako zrušení objednávky atd.
Všechny tyto metody pracují s databázovou tabulkou, kterou načítám přes dibi a která je poměrně velká. Já bych tuto tabulku chtěl nějakým způsobem „nacachovat“ v presenteru, aby se nemusel její select volat opakovaně v každé metodě, lze to nějak zařídit?
Editoval microcz (18. 5. 2014 18:53)
- David Matějka
- Moderator | 6445
render* metody se volaji az po handle. Pokud chces nacist data, se kterymi bude pote presenter pracovat, pouzij radeji action* metody.
- sKopheK
- Člen | 207
Pokud si natahání dat z databáze dáš do samostatné metody, stačí mít v presenteru chráněnou/soukromou proměnnou, do které výsledek uložíš, a při dalším volání metody jen zkontroluješ, jestli už tam je nějaký obsah, abys to netahal zbytečně víckrát.
class xPresenter
{
protected $data = NULL;
protected function getData()
{
if ($this->data == NULL)
{
// získání dat
$this->data = ...;
}
return $this->data;
}
...
}
Samozřejmě při tahání dat podle nějakých podmínek to bude trošku složitější.
- microcz
- Člen | 62
Ahaa, takže jestli Vaše rady chápu dobře tak mám tabulku načíst v action místo render a pak jí nacachovat do atributu, který zůstane přístupný pro ostatní metody po dobu existence daného presenteru.
Jan Endel: Vyjádřil jsem se nepřesně :o) Nepotřebuji cachovat celou tabulku jen řádek určitého view, jehož vyselektování zabere nějaký čas.