ThinkPHP行为扩展Behavior应用实例详解
ThinkPHP  /  管理员 发布于 8年前   282
本文以实例的形式详细介绍了ThinkPHP的行为扩展Behavior的实现方法,有助于读者更灵活的掌握ThinkPHP的开发,具体步骤如下: ThinkPHP 行为扩展 (Behavior) 流程: 最先是读取配置文件信息: 读取配置文件信息 ThinkPHP\Mode\common.php 默认调用了系统行为扩展:静态缓存读取 、页面Trace显示输出、模板解析、模板内容输出替换、静态缓存写入 分别用Hook去加载 系统行为和自定义行为,并把配置信息保存到 Hook 私有属性$tags中 ThinkPHP\Library\Think\Think.class.php 初始化完成后会调用App::run(); ThinkPHP\Library\Think\App.class.php文件如下: 可以看出程序在App init之前 通过钩子去监听(查看)此动作时是否有需要处理的。循环$tags['app_init']获取类名并通过类名自动执行行为扩展类run方法 所有钩子如下: 缺点如下: 1.顺序不可控(配置文件没有专门的参数去控制顺序)如app_init同时有2个监控时先调用哪个方法。 2.监控不是全局监控内部写的太死只有一些定义好的不能通过配置文件去自动控制每一个操作的钩子(可能是考虑到性能才没有加) 优点如下: 1.可以实现了好多行为扩展 2.可以代理检测、浏览器防刷新检测、操作路由检测等 总结: 行为扩展就是在 程序某个操作时去额外的去执行某一特定功能。如程序在操作数据库 读的时候 通过explian获取性能信息并监测性能瓶颈 如出现获取数据时超过特定秒数 就把相关信息email给项目经理等。$mode = include is_file(CONF_PATH.'core.php')?CONF_PATH.'core.php':MODE_PATH.APP_MODE.'.php';
// 行为扩展定义'tags' => array('app_init' => array(),'app_begin' => array( 'Behavior\ReadHtmlCache', // 读取静态缓存),'app_end' => array( 'Behavior\ShowPageTrace', // 页面Trace显示),'path_info' => array(),'action_begin' => array(),'action_end' => array(),'view_begin' => array(),'view_parse' => array( 'Behavior\ParseTemplate', // 模板解析 支持PHP、内置模板引擎和第三方模板引擎),'template_filter'=> array( 'Behavior\ContentReplace', // 模板输出替换),'view_filter' => array( 'Behavior\WriteHtmlCache', // 写入静态缓存),'view_end' => array(),),
// 加载模式行为定义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');
/*** 运行应用实例 入口文件使用的快捷方法* @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 ;}
'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' // 内容过滤标签
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号