数据库准备:
use test;
show tables;
-- 数据库准备
drop table if exists t_messageInfo;
create table t_messageInfo
(
id int unsigned primary key,
Content nvarchar(50) not null
)
engine=innodb;
insert into t_messageInfo
values
(1,'test1'),(2,'test2');
select *from t_messageInfo;
-- 创建存储存储过程
delimiter $$
drop procedure if exists proc_GetMessageInfo$$
create procedure proc_GetMessageInfo
()
begin
select * from T_messageInfo;
end$$
delimiter ;
call proc_GetMessageinfo(); PHP代码准备:文档结构截图:

关键代码:
IndexController:
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
header("Content-Type:text/html; charset=utf-8");
$IndexEvent=D('Index','Event');
echo "调用IndexEvent";
dump($IndexEvent->getMessage(""));
}
} IndexEvent:<?php
namespace home\Event;
/**
* TPDemo
*/
class IndexEvent
{
public function GetMessage($value='')
{
$MessageLogic=D('Message','Logic');
return $MessageLogic->getMessageList();
}
public function Demo($value='')
{
# code...
}
} IndexLogic:<?php
namespace home\Logic;
use Think\Model;
/**
*
*/
class MessageLogic
{
public function getMessageList($value='')
{
# code...
$MessageTable=M();
//$MessageTableList=$MessageTable->query('call proc_GetMessageInfo()');
$MessageTableList=$MessageTable->query('call proc_GetMessageInfo()');
return $MessageTableList;
}
}
?> 大功告成。这里IndexEvent作为IndexController的事件处理对象,担负了除前台显示意外所有的工作,如数据库访问、数据处理等。这里只是用一个简单的案例来说明TP的多层结构支持。MessageLogic作为数据库中T_MessageInfo的逻辑对象,肩负有关Message相关的数据访问及处理工作。后续疑问,在进行测试中,出现了一个不和谐的小插曲。在修改IndexController时出现不一样的结果;
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
header("Content-Type:text/html; charset=utf-8");
$IndexEvent=D('Index','Event');
//疑似问题内容1
echo "调用IndexEvent";
dump($IndexEvent->getMessage(""));
//疑似问题内容2
echo "直接调用MessageLogic";
$MessageLogic=D('Message','Logic');
dump( $MessageLogic->getMessageList());
}
} 以上代码 疑似问题内容1、疑似问题内容2中,只能第一个执行成功,另一个则执行失败。
如疑似问题内容1被注释,疑似问题内容2即执行成功;疑似问题内容1和疑似问题内容2共同运行,疑似问题内容1执行成功,疑似问题内容2执行失败;注释疑似问题内容1,疑似问题内容2执行成功。
个人愚见是因为MessageLogic对象的问题,我在IndexEvent中已经实例化一个MessageLogic,在IndexController又实例化一个MessageLogic。因本人能力有限,该情况还处在猜测阶段。还请各位大侠指点。
最佳答案