[风雨者]

山高路远,风雨兼程!

用户操作
[即时聊天] [发私信] [加为好友]
伍维波ID:letsflytogether
81780次访问,排名1191好友8人,关注者92
一个非计算机专业毕业的,带着对计算机的热爱,如今从事在软件开发领域。我想,我已经证明了专业不应是我们就业的标尺。
除了软件开发,我的爱好还有篮球和美食。
letsflytogether的文章
原创 67 篇
翻译 0 篇
转载 58 篇
评论 117 篇
伍子的公告
    没有比人更高的山,
    没有比脚更长的路。
------------------------
    既然选择了远方,
    便只顾风雨兼程。
------------------------
    失败只有一种,
    就是半途而废。
------------------------
    天下难事必作于易,
    天下大事必作于细。
------------------------
    从用户的角度考虑,
    你就成功了一半。
------------------------
    谁也不能随随便便地成功,
    它来自彻底的自我管理和毅力。
------------------------
月 [下月] [上月]
最近评论
liusping:如果执行一个命令有返回值,这个返回值该如何处理?定义成Command 的一个字段吗?
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
cqg1220:机柜
badonly:原来模板技术是这样的!!!谢了~~~
apollosun:恭喜啊

女儿就是宝,享福了啊

我女儿现在虚岁4岁,太可爱了,我每天下班回家的感觉就象过节。
文章分类
收藏
相册
个人风采
精品收藏
文章贴图
个人网站
女儿的博客
我在ITPUB上的博客
我在世界经理人上的博客
技术网站
CSDN
MSDN
UML软件工程组织
中国UI设计网
蓝色理想
软件工程专家网
休闲娱乐
学习网站
ICXO
网页设计师
金桥译港世界通
友情链接
heiyeluren的Blog(RSS)
博客中国上的琴剑楼
小肥羊
汉博园——陈希成
韦子的空中楼阁
资源网站
中国盟动力
太平洋电脑网
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 php.MVC系列教程之分配器收藏

新一篇: php.MVC系列教程之后记 | 旧一篇: php.MVC系列教程之视图

ActionDispatcher负责选择正确的显示资源并生成响应页面返回给用户。下图显示了ActionDispatcher的处理过程。



扩展ActionDispatcher

在大部分应用中我们需要扩展框架的ActionDispatcher类来生成自己的分配器,在本例中我们创建的分配器叫做ReportActionDispatcher,在该类中,我们重写serviceResponse()方法,如下:

class ReportActionDispatcher extends ActionDispatcher {

   function ReportActionDispatcher($uri='', $wrapper='', $servletPath='',
                                 $pathInfo='', $queryString='', $name='') {

      parent::ActionDispatcher($uri='', $wrapper='', $servletPath='',
                                 $pathInfo='', $queryString='', $name='');

      $this->log->setLog('isDebugEnabled' , False);
      $this->log->setLog('isTraceEnabled' , False);
   }

   function serviceResponse(&$request, &$response) {

      $trace = $this->log->getLog('isTraceEnabled');
      if($trace)
         $this->log->trace('Start: TestActionDispatcher->serviceResponse(..)['.__LINE__.']');

      $requestURI = $this->uri;

      $form = $request->getAttribute('ACTION_FORM');
      $data = $request->getAttribute('FORM_DATA');
      $errors = $request->getAttribute( Action::getKey('ERROR_KEY') );

      $pageBuff = '';
      ob_start();
         include $requestURI;
         $pageBuff = ob_get_contents();
      ob_end_clean();

      $response->setResponseBuffer($pageBuff);
   }
}

serviceResponse()方法

在serviceResponse()方法中,我们可以设置是否记录日志。

然后我们得到模板资源的URI

 $requestURI = $this->uri;

在本例中URI有salesReportIndex.tpl和salesReport.tpl两个模板文件。

接下来我们得到ActionForm,form data和ActionErrors对象

 $form = $request->getAttribute('ACTION_FORM');
 $data = $request->getAttribute('FORM_DATA');
 $errors = $request->getAttribute( Action::getKey('ERROR_KEY') );

这些对象我们都是在ActionForm和Action类中创建的。
注意:这些对象在这个方法范围内都可以使用,因此在模板中我们也可以使用。

现在我们能在ob_start()和ob_end_clear()之间包含模板资源($requestURI)。

 ob_start();
    include $requestURI;
    $pageBuff = ob_get_contents();
 ob_end_clean();

当一个模板文件被包含,在里面的任何PHP子句都会被当作一般的PHP脚本来执行。这样,$form,$data和$errors等对象在模板文件中都是可见的(即可以使用)。

PHP输出缓冲区允许我们获取已经包含的资源并保存到缓冲变量$pageBuff中,$pageBuff变量现在包含了已经完成的HTTP响应内容,就象用户在他/的浏览器上看到的网页一样。
 
最后我们返回$pageBuff的内容到分配器:

$response->setResponseBuffer($pageBuff);

分配器然后再将$pageBuff的内容作为HTTP响应发送到客户端。

 

 

 


 

发表于 @ 2004年12月31日 08:33:00|评论(loading...)|编辑

新一篇: php.MVC系列教程之后记 | 旧一篇: php.MVC系列教程之视图

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 伍子