ThinkPHP获取Discuz的信息之后就不能实例化Thinkphp本身的模型


我做的是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');这句代码备注掉,模板可以正常显示{$userinfo['username']}等变量。

但是不备注$local=new Model('Local');什么都不能显示。

反过来也是一样,把
$user=new UserAction();
$user_login_info=$user->logininfo();
$this->assign('userinfo',$user_login_info);
这么3行去掉,模板可以正常显示,也可以获取Local的信息。

总而言之,他们2个犯冲,只能显示其一。

Discuz!X thinkphp

鸭梨是多的 12 years, 2 months ago

给你说下原因把,不贴代码了, 因为你调用用户信息, ucenter 里面的 类 和 tp 里面的类的名称冲突 ,建议把 类名在修改下试试
比如:ThinkPHP\Lib\Think\Db\Db.class.php 跟uc_client 里面的db.class.php
类名就冲突了

msgybs answered 12 years, 2 months ago

Your Answer