2015-11-02 5 views
0

У меня есть объект SettingsSiteTable со следующим методом для чтения настроек в базе данных и хранения результатов в кеше.CakePHP 3: Не уверен Почему кеш :: read() не работает

// 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-> key является '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/кэш/Настройки/settings_site (не уверен, что расширение файла)

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

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

+0

Поэтому я думаю, что это имеет какое-то отношение к лицу, которое я кэширую набор результатов после того, как запрос уже выполнен ... Я думаю, что я на что-то. За исключением теперь я получаю сообщение об ошибке «Вы не можете сериализовать или unserialize экземпляры PDO» ... все еще нуждаетесь в помощи – bowlerae

+0

ОК СЕЙЧАС Я думаю, что это связано с тем, что я не указываю конфигурацию в Cache :: read(), поэтому он использует значение по умолчанию, но я пишу 'settings' – bowlerae

ответ

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 
Смежные вопросы