首页 > 开发 > PHP > 正文

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

2024-05-04 22:19:40
字体:
来源:转载
供稿:网友

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

ThinkPHP 行为扩展 (Behavior) 流程:

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

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

读取配置文件信息 ThinkPHP/Mode/common.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(),),

默认调用了系统行为扩展:静态缓存读取 、页面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中

ThinkPHP/Library/Think/Think.class.php 初始化完成后会调用App::run();

ThinkPHP/Library/Think/App.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'      // 内容过滤标签            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表