搜索
系统检测到您的用户名不符合规范:

TP3.2多层分级(Logic+Event)详解+案例中多次调用出现的问题

浏览:3993 发布日期:2014年08月19日 分类:求助交流 关键字: Logic Event MVC多层 多次调用
本人菜鸟一枚,处于对技术的热忱,在尝试使用PHP开发BS项目。前期从事过一些BS项目,对于MVC情有独钟。在自学TP3.2开发手册中,发现在Controller(TP3.1前为Action)中加入了Logic、Event、Service可选的分层。在此做一个小的Demo进行备忘。
数据库准备:
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。因本人能力有限,该情况还处在猜测阶段。还请各位大侠指点。
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
洛山红茶
积分:1665 等级:LV3
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /