Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CakePHP Cache::clear does not work

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!

like image 705
Guns Avatar asked Oct 07 '13 07:10

Guns


People also ask

How to clear cache in CakePHP?

Clearing the Cache This will clear all cached data, excluding cached view files. If you need to clear the cached view files, use clearCache() .

What are cached files?

Your Android phone's cache comprises stores of small bits of information that your apps and web browser use to speed up performance. But cached files can become corrupted or overloaded and cause performance issues. Cache needn't be constantly cleared, but a periodic clean out can be helpful.

What is caching in programming?

In computing, a cache is a high-speed data storage layer which stores a subset of data, typically transient in nature, so that future requests for that data are served up faster than is possible by accessing the data's primary storage location.


1 Answers

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

like image 142
Vinod Patidar Avatar answered Sep 24 '22 17:09

Vinod Patidar