现在是ThinkPHP+Discuz!X2.5的整合
想让ThinkPHP直接获取Discuz的用户登录信息。下面这个UserAction可以成功获取到。
- <?php
- class UserAction extends Action{
- function logininfo(){
- include '../bbs/source/class/class_core.php';
- $discuz = & discuz_core::instance();//以下代码为创建及初始化对象
- $discuz->cachelist = $cachelist;
- $discuz->init();//以上是调用discuz公共执行类等核心代码
- global $_G;
- $arr1= array(
- 'uid'=>$_G['uid'],
- 'username'=>$_G['username'],
- 'adminid'=>$_G['adminid'],
- 'groupid'=>$_G['groupid'],
- 'sid'=>$_G['sid'],
- 'formhash'=>$_G['formhash'],
- 'connectguest'=>$_G['connectguest'],
- 'timestamp'=>$_G['timestamp'],
- 'starttime'=>$_G['starttime'],
- 'clientip'=>$_G['clientip'],
- 'referer'=>$_G['referer'],
- 'charset'=>$_G['charset'],
- 'gzipcompress'=>$_G['gzipcompress'],
- 'authkey'=>$_G['authkey'],
- );
- //dump($arr1);
- return $arr1;
- }
- }
- ?>
- 但是在其他Action中调用它,就会出现一个很严重的问题。
- 如果我调用了这个UserAction,并且实例化了模型,页面将什么都不显示。
- 如果我只实例化模型,或者只调用这个UserAction,则正常显示。
- 我建立了一个测试控制器,TestAtion,代码如下
- <?php
- class TestAction extends Action{
- function test(){
- $user=new UserAction(); //实例化UserAction
- $user_login_info=$user->logininfo();
- $this->assign('userinfo',$user_login_info);
- //$local=new Model('Local'); //实例化Local模型
- $this->display();
- }
- }
- ?>
复制代码
如果把
- $local=new Model('Local');
复制代码
这句代码备注掉,模板可以正常显示
等变量。
但是不备注
- $local=new Model('Local');
复制代码
什么都不能显示。
反过来也是一样,把
- $user=new UserAction();
- $user_login_info=$user->logininfo();
- $this->assign('userinfo',$user_login_info);
复制代码
这么3行去掉,模板可以正常显示,也可以获取Local的信息。
总而言之,他们2个犯冲,只能显示其一。
原因:
UCENTER里有个C方法,TP里也有。
还有就是类冲突, 因为调用用户信息, ucenter 里面的 类 和 tp 里面的类的名称冲突 ,把 类名在修改下
比如:ThinkPHP\Lib\Think\Db\Db.class.php 跟uc_client 里面的db.class.php
|