🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 控制器方法覆盖(cover) ## 原理 通过覆盖对应的控制器方法,让程序调用该方法的时候,调用自己二开后的功能。 ## 举例 **需要实现的功能** 如果我要在用户进入首页的时候检测用户的IP,并显示在首页上显示出用户的访问IP **分析** 首页相关的控制器是`Home/c/HomeController.php`,相关的方法是`index()` 那么我要做的是在`index()`方法里面写一个获取用户IP的东西,并想办法显示到首页`index.html`上面 **实现** 1. 复制`Home/c/`下面的`HomeController.php`到`Home/plugins/`目录下面 2. 修改内容如下: ~~~ namespace Home\plugins;//更改这个地方,原来是 c 改为 plugins use Home\c\CommonController;//更改这个地方,原来FrPHP\lib\Controller use FrPHP\Extend\Page; use FrPHP\Extend\ArrayPage; ~~~ 3. 在这个新文件里面的`index()`方法里写获取用户IP的方法 ~~~ //首页 function index(){ //插入获取用户IP的方法 $ip = GetIP(); //系统内置的方法,无需考虑如何实现 //赋值到模板中输出,这一步不能缺少,否则无法输出 $this->ip = $ip; /**以上为新增内容**/ $url = current_url(); $cache_file = APP_PATH.'cache/data/'.md5(frencode($url)); $this->cache_file = $cache_file; $this->start_cache($cache_file); $this->display($this->template.'/index'); $this->end_cache($this->cache_file); } ~~~ 4. 模板`index.html`中输出用户IP ~~~ {$ip} 或者 {php echo $ip /} ~~~ 5. 制成后台安装插件,请查看左侧相关章节。 > 是不是相当简单? 简单就对了,极致CMS就是很简答的东西~