gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章ThinkPHP行为扩展Behavior应用实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

ThinkPHP 行为扩展 (Behavior) 流程:

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

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

读取配置文件信息 ThinkPHP\Mode\common.php 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 行为扩展定义
'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显示输出、模板解析、模板内容输出替换、静态缓存写入 。

?
1
2
3
4
5
6
7
8
9
// 加载模式行为定义
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文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 运行应用实例 入口文件使用的快捷方法
* @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方法 。

所有钩子如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
'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行为扩展Behavior应用实例详解的文章就讲到这里了,如果你想了解更多关于ThinkPHP行为扩展Behavior应用实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com