ThinkPHP行为扩展Behavior应用实例详解
前端之家收集整理的这篇文章主要介绍了
ThinkPHP行为扩展Behavior应用实例详解,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@本文以实例的形式详细介绍了ThinkPHP的行为扩展Behavior的实现方法,有助于读者更灵活的掌握ThinkPHP的开发,具体步骤如下:
@H_
301_0@Think
PHP 行为扩展 (Behavior) 流程:
@H_
301_0@最先是读取
配置文件信息:
<div class="jb51code">
<pre class="brush:
PHP;">
$mode = include is_file(CONF_PATH.'core.
PHP')?CONF_PATH.'core.
PHP':MODE_PATH.APP_MODE.'.
PHP';
@H_
301_0@读取
配置文件信息 Think
PHP\Mode\common.
PHP
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(),),
@H_
301_0@默认
调用了系统行为扩展:静态缓存读取 、
页面Trace
显示输出、模板解析、模板
内容输出替换、静态缓存写入
PHP;">
// 加载模式行为定义
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');
@H_
301_0@分别用Hook去加载 系统行为和
自定义行为,并把配置信息保存到 Hook 私有
属性$tags中
@H_
301_0@Think
PHP\Library\Think\Think.class.
PHP 初始化完成后会
调用App::run();
@H_
301_0@
ThinkPHP\Library\Think\App.class.PHP文件如下:
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 ;
}
@H_301_0@可以看出程序<span style="color: #0000ff">在App init之前 通过钩子去监听(查看)此动作时是否有需要处理的。循环$tags['app_init']获取类名并通过类名自动执行行为扩展类run方法
@H_
301_0@
所有钩子如下:
<div class="jb51code">
<pre class="brush:
PHP;">
'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' //
内容过滤
标签