安装thinkcmf5时,要把它部署到web目录下。假如web目录是d:\phpweb
使用一段时间后,想修改"cmf"目录怎么办?例如:将"cmf"改成"cmf5",使用cmf5后台时会出现以下错误
之所以出现这样的错误,主要是左侧导航菜单的路径还保留原来的路径,看一下浏览器地址栏中的访问地址就清楚了。
“#”后面就是要访问的地址,还保留了原来的cmf目录,这与后来改成的“cmf5"出现了不一致
如何解决此问题,那就要分析thinkcmf5的源代码
cmf5后台的页面整体使用iframe实现,对应的控制器就是admin模块下的index控制器中的index方法,打开此控制器,一查究竟
/**
* 后台首页
*/
public function index()
{
$content = hook_one('admin_index_index_view');
if (!empty($content)) {
return $content;
}
$adminMenuModel = new AdminMenuModel();
$menus = cache('admin_menus_' . cmf_get_current_admin_id(), '', null, 'admin_menus');
if (empty($menus)) {
$menus = $adminMenuModel->menuTree();
cache('admin_menus_' . cmf_get_current_admin_id(), $menus, null, 'admin_menus');
}
$this->assign("menus", $menus);
$result = Db::name('AdminMenu')->order(["app" => "ASC", "controller" => "ASC", "action" => "ASC"])->select();
$menusTmp = array();
foreach ($result as $item){
//去掉/ _ 全部小写。作为索引。
$indexTmp = $item['app'].$item['controller'].$item['action'];
$indexTmp = preg_replace("/[\\/|_]/","",$indexTmp);
$indexTmp = strtolower($indexTmp);
$menusTmp[$indexTmp] = $item;
}
$this->assign("menus_js_var",json_encode($menusTmp));
//$admin = Db::name("user")->where('id', cmf_get_current_admin_id())->find();
//$this->assign('admin', $admin);
return $this->fetch();
}
分析以上代码得出以下结论:后台左侧导航菜单的地址被缓存了起来,如果删除这些缓存效果如何呢?
找到cmf5的缓存文件
cache目录就是存入缓存文件的地方 ,删除cache目录下的所有文件