在不启用Debug

时间:2016-05-06 15:08:59

标签: cakephp caching cakephp-2.0

是否有一种方便的方法可以在不更改生产环境中的调试级别的情况下使模型缓存无效。目前我们必须设置:

Configure::write('debug', *1 or 2*);

为了在更新生产后清除模型缓存。这不是最优的,因为最终用户有可能看到他们不打算看到的调试消息或警告。

我们没有使用文件缓存,因此它不像从/ tmp / cache / models /目录中删除缓存文件那么容易。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这已经开放了一段时间没有答案,所以我编写了自己的解决方案。这是一个可以根据需要清除缓存的函数。

我使用$ uses = false为管理工具创建了一个Controller,因此它不会查找关联的模型/表。然后我创建了一个函数来显示当前配置的所有引擎。当用户选择配置的缓存引擎时,它会调用__clearCache()函数:

public function admin_cache_manager($clear=false, $engineName=''){
        $this->layout = 'manager';
        $engines = Cache::configured();
        if($clear){
            if($engineName == 'all'){
                $status = $this->__clearCache($engines);
            }
            else{
                $clearEngine[0] = $engineName;
                $status = $this->__clearCache($clearEngine);
            }
            $this->set(compact('status'));
        }
        foreach($engines as $key => $engine){
            $configs[$key] = Cache::config($engine);
        }
        $this->set(compact('engines'));
        $this->set(compact('configs'));
    }

__clearCache()函数实际上清除了已配置的缓存并返回状态:

private function __clearCache($engines=array(), $check=false){
        foreach($engines as $engine){
            if(Cache::config($engine)){
                if(Cache::clear($check, $engine)){
                    $status[$engine] = 'Cache Cleared';
                }
                else{
                    $status[$engine] = 'Clear Cache Failed';
                }
            }
            else{
                $status[$engine] = 'Engine Not Configured.';
            }
        }
        return $status;
    }