控制器方法覆盖(cover)
基本原理
通过覆盖对应的控制器方法,让程序调用该方法的时候,调用自己二开后的功能。
案例
如果我要在用户进入首页的时候检测用户的IP,并显示在首页上显示出用户的访问IP
首页相关的控制器是 app/home/c/HomeController.php
,相关的方法是 index()
那么我要做的是在 index()
方法里面写一个获取用户IP的东西,并想办法显示到首页 index.html
上面
复制
app/home/c/
下面的HomeController.php
到Home/plugins/
目录下面修改内容如下:
namespace app\home\plugins; //更改这个地方,原来是 c 改为 plugins
use app\home\c\CommonController;//更改这个地方,原来 frphp/lib/Controller
use frphp\extend\Page;
use frphp\extend\ArrayPage;
- 在这个新文件里面的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);
}
- 模板index.html中输出用户IP
{$ip} 或者 {php echo $ip /}
是不是相当简单? 简单就对了,极致CMS就是很简答的东西~