Chyba v cache v metode load?
- Polki
- Člen | 553
Ahoj, narazil jsem na docela problém.
Chci využít cache, ale nějak mi to blbne.
mám kód:
$this->cache->clean();
$result = $this->cache->load(
'order',
function (&$dependencies) use ($ts, $order) {
$dependencies[Cache::EXPIRE] = '30 minutes';
return $ts->statusHandler($order);
}
);
Princip je ten, že když načítám podrobnosti objednávky, které tahá
statusHandler, tak toto se ptá na různá API, takže to trvá dlouho.
Důležité je to, že $order je jen 1, tedy problém není v záměně obsahu
proměnných.
a teď o co jde:
když kód upravím:
$this->cache->clean();
bdump($order); // Vypíše správně třeba 'orderAAA'
$result = $this->cache->load(
'order',
function (&$dependencies) use ($ts, $order) {
bdump($order); // Vypíše správně to stejné jako dump předtím, tedy 'orderAAA'
bdump($ts); // Vypíše správně instanci třídy, nad kterou se má volat funkce (statusHandler)
$dependencies[Cache::EXPIRE] = '30 minutes';
return $ts->statusHandler($order);
}
);
bdump($result); // Vypíše hodnotu 2
bdump($ts->statusHandler($order)); // Vypíše hodnotu 8
Pro testovací účely vypadala funkce ‚statusHandler‘ při prvním volání takto:
public function statusHandler(sting $order): int
{
return 2;
}
A při dalších voláních takto
public function statusHandler(sting $order): int
{
return 8;
}
Jde o to, že při prvním voláním se správně vrátí 2 a zavolá se opravdu callback load metody. Ovšem po vymazání cache se taktéž zavolá callback load metody, ale již se z nějakého důvodu nevolá uvnitř něj funkce ‚statusHandler‘ a místo toho load vrátí 2, jako v prvním případě.
Pokud ovšem funkci upravím takto:
$this->cache->clean();
$result = $this->cache->load(
'order',
function (&$dependencies) use ($ts, $order) {
$dependencies[Cache::EXPIRE] = '30 minutes';
$a = $ts->statusHandler($order);
return $a;
}
);
tak vše funguje jak má.