我有一个问题: 当我试图以编程方式刷新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"相同。按钮,但它不在我的情况下。当我运行脚本时,我保存了一个新的控制器,但是在按照上述方式(以及我已经尝试过的许多其他方法)以编程方式进行高速缓存刷新后,它无法正常工作。
但是,只要我在脚本工作中间手动执行相同的管理面板,它就会开始正常工作。
有什么想法吗?如果我将脚本代码放在这里有帮助吗?
提前致谢!
答案 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);
}
}