刷新Magento缓存

时间:2018-01-09 10:14:54

标签: php magento caching

我有一个问题: 当我试图以编程方式刷新Magento缓存时:

$types=array('config','layout','block_html','translate','collections','eav','config_api','config_api2');
foreach($types as $type) {
    $c = Mage::app()->getCacheInstance()->cleanType($type);
    Mage::dispatchEvent('adminhtml_cache_refresh_type', array('type' => $type));
}

[source]

我已经阅读了this article有关Magento缓存及其刷新的内容,但我仍然遗漏了一些东西。

上述方法应该与" Flush Magento Cache"相同。按钮,但它不在我的情况下。当我运行脚本时,我保存了一个新的控制器,但是在按照上述方式(以及我已经尝试过的许多其他方法)以编程方式进行高速缓存刷新后,它无法正常工作。

但是,只要我在脚本工作中间手动执行相同的管理面板,它就会开始正常工作。

有什么想法吗?如果我将脚本代码放在这里有帮助吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您的代码似乎只清除了块缓存,对于新的控制器/类,您需要删除缓存文件夹,您可以像这样以编程方式执行

/**
 * Remove cache folders:
 */
public function cleanFiles() {
    try {
        flush();
        //cache
        $dir = Mage::getBaseDir('cache');
        $items = array_diff(scandir($dir), array('..', '.'));
        foreach ($items as $item) {
            $path = $dir . DIRECTORY_SEPARATOR . $item;
            is_dir($path) ? $this->_rrmdir($path) : unlink($path);
        }
    } catch (Exception $e) {
        die("[ERROR:" . $e->getMessage() . "]" . PHP_EOL);
    }
}

/**
 * Removes a directory and all elements contained
 * @param string $dir directory to remove
 */
private function _rrmdir($dir) {
    if (is_dir($dir)) {
        $objects = array_diff(scandir($dir), array('..', '.'));
        foreach ($objects as $object) {
            $path = $dir . DIRECTORY_SEPARATOR . $object;
            is_dir($path) ? $this->_rrmdir($path) : unlink($path);
        }
        reset($objects);
        rmdir($dir);
    }
}