2015-11-02 55 views
0

我有一個SettingsSiteTable對象具有以下方法來讀取數據庫中的設置並將結果存儲在緩存中。CakePHP 3:不確定爲什麼Cache :: 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

所以我認爲它與面對的是我已經執行查詢後緩存結果集......我想我正在做的事情。除了現在我得到一個錯誤消息「你不能序列化或反序列化PDO實例」......仍然需要幫助 – bowlerae

+0

現在好了我認爲這與我沒有在Cache :: read中指定配置有關()所以它使用默認,但我正在寫'設置' – bowlerae

回答

1

愚蠢我我意識到我遺漏了緩存期間的配置選項: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