Chyba v cache v metode load?

Polki
Člen | 553
+
0
-

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á.