在不打开调试的情况下使 CakePHP 模型缓存无效

Invalidate CakePHP Model Cache without turning on Debug

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

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

以便在更新到生产后清除模型缓存。这不是最佳选择,因为最终用户可能会看到他们不希望看到的调试消息或警告。

我们没有使用文件缓存,所以它不像从 /tmp/cache/models/ 目录中删除缓存文件那么简单。

提前致谢。

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

我使用 $uses = false 为管理工具创建了一个控制器,因此它不会寻找关联的 Model/Table。然后我创建了一个函数来显示当前配置的所有引擎。当用户选择配置的缓存引擎时,它会调用 __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()函数实际上清除了配置的缓存和returns状态:

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;
    }