Laravel cache :: запомнить - не может сериализовать закрытие - PullRequest
0 голосов
/ 26 апреля 2020

При попытке использовать кеш я получаю следующее исключение:

enter image description here

Но в документах Laravel (https://laravel.com/docs/5.7/cache) они используют закрытие в их примере:

closure being used in Lara docs example

Любая помощь, высоко ценимая ... погуглила ее, и люди, кажется, возникли проблемы с замыканиями forever (), не являющимися сериализуемыми (но предлагаемые решения не работают для меня) ):

public function getAccount(string $guid): Account
    {
        $key = md5(sprintf('xero/accounts[guid="%s"]', $guid));

        $account = $this->cache->get($key);
        if ($account === null) {
            //dump('account not found, storing in cache...');
            /** @var Account $account */
            $account = $this->xero->loadByGUID(Account::class, $guid);
            $this->cache->put($key, $account, Carbon::now()->addHour());
        }
    }

Но все равно появляется та же ошибка (не удается сериализовать Closure) в строке '$ this-> cache-> put ($ key, $ account, Carbon :: now () -> addHour ( )); '

Объект $ account имеет тип: use XeroPHP \ Models \ Accounting \ Account; (от https://github.com/calcinai/xero-php)

1 Ответ

0 голосов
/ 03 мая 2020

Модели содержат ссылку на приложение Xero, которое содержит экземпляр клиента Guzzle, который сам имеет свойства, которые содержат замыкания. Функция сериализации PHP не может сериализовать замыкания: https://3v4l.org/1MIpd

При вызове и извлечении модели возможен вызов toStringArray и fromStringArray.

(полный кредит Джо sh -G: https://github.com/calcinai/xero-php/issues/734)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...