有时候在模块中可能需要调用其他模块来访问其他模块中的某个方法,比如显示网站在线人数,目前有多少会员,在每个页面可能都需要显示,以此来吸引访问者到网站注册会员.在每个页面显示相同内容的原因有时候与SEO有一定关系,如果需要优化的关键字在每个页面都有出现,这更利于百度搜索进行搜录.
跨模块访问的具体方法有
①自动加载函数/方法(spl_autoload_register)框架中在Think.class.php(Lib/Core/Think.class.)中已经封装了自动加载方法
实例化其他模块,调用模块方法;
class AdminAction extends Action{
//后台管理员登陆
public function login(){
$module = new UserstestAction ;
$module->numbers();
$this->display();
}
②利用函数来实现跨模块访问,不仅可以跨模块,而且可以跨项目访问.
利用A函数(common.php中可以查看具体参数)跨模块访问:
$User = A('Userstext');//
实例化当前项目的UserstextAction控制器.如果当前项目有分组,则:
$User = A('Admin/Userstext');
可以跨项目来调用模块,但是必须与当前项目是同一级的项目,不然会出错
$User = A("otherpro://User");
//如果项目有分组
$User = A("otherpro://Admin/User");
在tp3.1版本中,支持了控制器分层.
$User = A("Goods","family");
:实例化lib/family/Goodsfamily.class.php 如下所示
分层控制器仅用于内部调用,URL访问的控制器还是Action层,但是可以配置
DEFAULT_C_LAYER修改默认控制器层名称(该参数默认值为Action)。
利用R函数实现跨模块访问:
R($url,$parms,$layer):
$url参数说明 : [项目://][分组/]模块/操作
R("Admin/Userstest/numbers");
R("fetian://Admin/Userstest/numbers");
总结:其实R函数是对A函数的封装.
在跨项目调用的情况下,如果你的操作方法 有针对当前控制器的特殊变量操作,会有一些未知的问题,所以,一般来说,官方建议需要公共调用的控制器层单独开发,不要有太多的依赖关系。