当前位置:  编程技术>php

ThinkPHP行为扩展Behavior应用实例详解

    来源: 互联网  发布时间:2014-08-26

    本文导语:  本文以实例的形式详细介绍了ThinkPHP的行为扩展Behavior的实现方法,有助于读者更灵活的掌握ThinkPHP的开发,具体步骤如下: ThinkPHP 行为扩展 (Behavior) 流程: 最先是读取配置文件信息: $mode = include is_file(CONF_PATH.'core.php')?CONF_P...

本文以实例的形式详细介绍了ThinkPHP的行为扩展Behavior的实现方法,有助于读者更灵活的掌握ThinkPHP的开发,具体步骤如下:

ThinkPHP 行为扩展 (Behavior) 流程:

最先是读取配置文件信息:

$mode = include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';

读取配置文件信息 ThinkPHPModecommon.php

// 行为扩展定义
'tags' => array(
'app_init'   => array(
),
'app_begin'   => array(
  'BehaviorReadHtmlCache', // 读取静态缓存
),
'app_end'    => array(
  'BehaviorShowPageTrace', // 页面Trace显示
),
'path_info'   => array(),
'action_begin' => array(),
'action_end'  => array(),
'view_begin'  => array(),
'view_parse'  => array(
  'BehaviorParseTemplate', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎
),
'template_filter'=> array(
  'BehaviorContentReplace', // 模板输出替换
),
'view_filter'  => array(
  'BehaviorWriteHtmlCache', // 写入静态缓存
),
'view_end'   => array(),
),

默认调用了系统行为扩展:静态缓存读取 、页面Trace显示输出、模板解析、模板内容输出替换、静态缓存写入

// 加载模式行为定义
if(isset($mode['tags'])) {
  Hook::import(is_array($mode['tags'])?$mode['tags']:include $mode['tags']);
}

// 加载应用行为定义
if(is_file(CONF_PATH.'tags.php'))
// 允许应用增加开发模式配置定义
Hook::import(include CONF_PATH.'tags.php');  

分别用Hook去加载 系统行为和自定义行为,并把配置信息保存到 Hook 私有属性$tags中

ThinkPHPLibraryThinkThink.class.php 初始化完成后会调用App::run();

ThinkPHPLibraryThinkApp.class.php文件如下:

/**
* 运行应用实例 入口文件使用的快捷方法
* @access public
* @return void
*/
static public function run() {
// 应用初始化标签
Hook::listen('app_init');
App::init();
// 应用开始标签
Hook::listen('app_begin');
// Session初始化
if(!IS_CLI){
  session(C('SESSION_OPTIONS'));
}
// 记录应用初始化时间
G('initTime');
App::exec();
// 应用结束标签
Hook::listen('app_end');
return ;
}

 

可以看出程序在App init之前 通过钩子去监听(查看)此动作时是否有需要处理的。循环$tags['app_init']获取类名并通过类名自动执行行为扩展类run方法

所有钩子如下:

'url_dispatch'     // URL调度结束标签
'app_init'     // 应用初始化标签
'app_begin'     // 应用开始标签
'app_end'     // 应用结束标签
'action_begin'     // 动作执行前操作
'action_end'     // 动作执行后操作   
'ajax_return'     // 用于扩展其他返回格式数据
'path_info'       // 检测路由规则 如果没有则按默认规则调度URL
'template_filter'    // 模版编译过滤标签
'view_begin'      // 视图开始标签
'view_end'       // 视图结束标签
'view_parse'      // 视图解析标签
'view_filter'      // 内容过滤标签

缺点如下:

1.顺序不可控(配置文件没有专门的参数去控制顺序)如app_init同时有2个监控时先调用哪个方法。

2.监控不是全局监控内部写的太死只有一些定义好的不能通过配置文件去自动控制每一个操作的钩子(可能是考虑到性能才没有加)

优点如下:

1.可以实现了好多行为扩展

2.可以代理检测、浏览器防刷新检测、操作路由检测等

总结:

行为扩展就是在 程序某个操作时去额外的去执行某一特定功能。如程序在操作数据库 读的时候 通过explian获取性能信息并监测性能瓶颈 如出现获取数据时超过特定秒数 就把相关信息email给项目经理等。


    
 
 

您可能感兴趣的文章:

  • ThinkPHP CURD方法之order方法教程详解
  • ThinkPHP之N方法实例详解
  • ThinkPHP CURD方法中limit方法教程详解
  • ThinkPHP CURD方法之table方法教程详解
  • ThinkPHP模板判断输出Empty标签用法详解
  • ThinkPHP模板判断输出Present标签用法详解
  • ThinkPHP CURD方法之order方法详解
  • ThinkPHP3.1新特性之内容解析输出详解
  • ThinkPHP CURD方法中page方法教程详解
  • ThinkPHP空模块和空操作详解
  • ThinkPHP CURD方法之limit方法详解
  • ThinkPHP模板IF标签用法详解
  • ThinkPHP模板判断输出Defined标签用法详解
  • ThinkPHP CURD方法之table方法详解
  • ThinkPHP之R方法实例详解
  • ThinkPHP3.1之D方法实例详解
  • ThinkPHP模板范围判断输出In标签与Range标签用法详解
  • ThinkPHP CURD方法之data方法教程详解
  • 采用thinkphp自带方法生成静态html文件详解
  • ThinkPHP CURD方法之page方法详解
  • ThinkPHP之N方法实例教程
  • ThinkPHP之A方法实例教程
  • ThinkPHP标签怎么制作?thinkphp标签制作实例教程
  • ThinkPHP之A方法实例讲解
  • ThinkPHP实现批量删除数据的代码实例
  • ThinkPHP中L方法实例教程
  • 采用ThinkPHP中F方法实现快速缓存实例
  • ThinkPHP中R方法实例教程
  • ThinkPHP的Widget扩展实例
  • ThinkPHP的MVC开发机制实例解析
  • thinkphp自定义标签与view直接标签实例教程
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ThinkPHP学习笔记(一)ThinkPHP部署
  • ThinkPHP3.1新特性之对分组支持的改进与完善概述
  • 轻量级PHP开发框架 ThinkPHP
  • 模仿 thinkphp 的 nodejs MVC 框架 Nstorm
  • thinkphp分页保持搜索状态实现方法
  • ThinkPHP中的关联模型注意点
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
  • ThinkPHP让分页保持搜索状态的方法
  • ThinkPHP实现事务回滚示例代码
  • Thinkphp模板中截取字符串函数简介
  • ThinkPHP框架实现session跨域问题的解决方法
  • ThinkPHP命令行工具 Tptool
  • ThinkPHP之foreach标签使用概述
  • ThinkPHP中自定义目录结构的设置方法
  • ThinkPHP模板中判断volist循环的最后一条记录的验证方法
  • 浅析ThinkPHP中execute和query方法的区别
  • ThinkPHP的模版中调用session数据的方法
  • ThinkPHP中URL路径访问与模块控制器之间的关系
  • ThinkPHP查询中的魔术方法简述
  • Thinkphp中import的几个用法详细介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3