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

2025-05-29 0 47

本文以实例的形式详细介绍了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给项目经理等。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 ThinkPHP行为扩展Behavior应用实例详解 https://www.kuaiidc.com/104161.html

相关文章

发表评论
暂无评论