Reputation: 2728
I have a Cache Configuration in my bootstrap.php file as
Cache::config('long', array(
'engine' => 'File',
'duration' => '+1 week',
'probability'=> 100,
'mask' => 0666,
'path' => CACHE . 'long' . DS,
));
and i am trying to clear cache when a setting is edited. Below is my admin_edit function
public function admin_edit($id = null) {
if (!$this->Setting->exists($id)) {
throw new NotFoundException(__('Invalid setting'));
}
if ($this->request->is('post') || $this->request->is('put')) {
if ($this->Setting->save($this->request->data)) {
$this->Session->setFlash(__('The setting has been saved'));
$this->redirect(array('action'=> 'index'));
Cache::clear(false,'long');
Cache::gc();
}else {
$this->Session->setFlash(__('The setting could not be saved. Please, try again.'));
}
}else {
$options = array('conditions' => array('Setting.' . $this->Setting->primaryKey=> $id));
$this->request->data = $this->Setting->find('first', $options);
}
}
However, Cache::clear(false,'long')
does not work and it does not clear the Cache. Not sure what is going wrong. Stuck for a few days now!
Upvotes: 5
Views: 14311
Reputation: 685
Please use below function in any controller and run that function where you want it will be clear all cache.
/**
* function to clear all cache data
* by default accessible only for admin
*
* @access Public
* @return void
*/
public function clear_cache() {
Cache::clear();
clearCache();
$files = array();
$files = array_merge($files, glob(CACHE . '*')); // remove cached css
$files = array_merge($files, glob(CACHE . 'css' . DS . '*')); // remove cached css
$files = array_merge($files, glob(CACHE . 'js' . DS . '*')); // remove cached js
$files = array_merge($files, glob(CACHE . 'models' . DS . '*')); // remove cached models
$files = array_merge($files, glob(CACHE . 'persistent' . DS . '*')); // remove cached persistent
foreach ($files as $f) {
if (is_file($f)) {
unlink($f);
}
}
if(function_exists('apc_clear_cache')):
apc_clear_cache();
apc_clear_cache('user');
endif;
$this->set(compact('files'));
$this->layout = 'ajax';
}
Once let me know if not working for you :)
Thanks
Upvotes: 15