CakePHP 3: не уверен, почему Cache::read() не работает

У меня есть объект SettingsSiteTable со следующим методом чтения настроек в базе данных и сохранения результатов в кеше.

// GET ALL CONFIG SETTINGS
function getConfigs(){

    if(($settings_site = Cache::read($this->key)) === false) {
        $settings_site = $this->find('list', [
            'keyField' => 'key',
            'valueField' => 'value'
        ])->toArray();
        Cache::write($this->key, $settings_site, 'settings');
    }

    return $settings_site;
}  // END GET CONFIGS FUNCTION

Ключ $this-> — это «SettingsSite», и с этим, похоже, нет проблем. Я также добавил использование Cake\Cache\Cache в объектный файл таблицы.

Моя конфигурация кеша в файле app.php выглядит следующим образом:

'Cache' => [
    'default' => [
        'className' => 'File',
        'path' => CACHE,
    ],
    'settings' => [
        'className' => 'File',
        'duration' => '+6 hours',
        'path' => CACHE . 'settings/',
    ],
    '_cake_core_' => [
        // ...
    ],
    '_cake_model_' => [
        // ...
    ],
],

Кэш вроде успешно сохраняется. Я могу просмотреть файл кеша, расположенный по адресу tmp/cache/settings/settings_site (не знаю, какое у файла расширение)

Однако, если я изменяю данные в базе данных и обновляю страницу, отображается обновленная информация, что означает, что она неправильно читает из кеша и повторно запрашивает результаты.

Что я делаю не так? Я получил этот код непосредственно из 3. X Cookbook: запись в кэш


person bowlerae    schedule 02.11.2015    source источник
comment
Поэтому я думаю, что это как-то связано с тем, что я кэширую результирующий набор после того, как запрос уже выполнен... Я думаю, что я что-то понял. За исключением того, что теперь я получаю сообщение об ошибке. Вы не можете сериализовать или десериализовать экземпляры PDO... все еще нуждается в помощи   -  person bowlerae    schedule 02.11.2015
comment
Хорошо, СЕЙЧАС, я думаю, это связано с тем, что я не указываю конфигурацию в Cache::read(), поэтому он использует значение по умолчанию, но я пишу в «настройки».   -  person bowlerae    schedule 02.11.2015


Ответы (1)


Глупый я понял, что пропустил параметр конфигурации во время Cache:read(), поэтому он читал из конфигурации по умолчанию, но я писал в конфигурацию «настройки».

// GET ALL CONFIG SETTINGS
function getConfigs(){

    if(($settings_site = Cache::read($this->key, 'settings')) === false) {
        $settings_site = $this->find('list', [
            'keyField' => 'key',
            'valueField' => 'value'
        ])->toArray();

         Cache::write($this->key, $settings_site, 'settings');
    }


    return $settings_site;
}  // END GET CONFIGS FUNCTION
person bowlerae    schedule 02.11.2015