源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
楼主: ttx9n

[PHP编程] ThinkPHP行为扩展Behavior应用实例详解

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2018-12-25 17:53:55 | 显示全部楼层 |阅读模式
这篇文章主要介绍了ThinkPHP行为扩展Behavior应用实例,对于读者深入了解ThinkPHP框架程序设计大有帮助,需要的朋友可以参考下

本文以实例的形式详细介绍了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'      // 内容过滤标签

缺点如下:

1.顺序不可控(配置文件没有专门的参数去控制顺序)如app_init同时有2个监控时先调用哪个方法。

2.监控不是全局监控内部写的太死只有一些定义好的不能通过配置文件去自动控制每一个操作的钩子(可能是考虑到性能才没有加)

优点如下:

1.可以实现了好多行为扩展

2.可以代理检测、浏览器防刷新检测、操作路由检测等

总结:

行为扩展就是在 程序某个操作时去额外的去执行某一特定功能。如程序在操作数据库 读的时候 通过explian获取性能信息并监测性能瓶颈 如出现获取数据时超过特定秒数 就把相关信息email给项目经理等。

回复

使用道具 举报

1

主题

2万

回帖

321

积分

中级会员

Rank: 3Rank: 3

积分
321
发表于 2022-8-8 17:41:23 | 显示全部楼层
而快乐你们快乐马年快乐
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2022-9-23 01:30:57 | 显示全部楼层
还可以不错
回复 支持 反对

使用道具 举报

5

主题

2万

回帖

69

积分

注册会员

Rank: 2

积分
69
发表于 2022-12-12 13:15:10 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

7

主题

2万

回帖

288

积分

中级会员

Rank: 3Rank: 3

积分
288
发表于 2023-1-30 19:30:37 | 显示全部楼层
下载来瞧瞧
回复 支持 反对

使用道具 举报

27

主题

2万

回帖

331

积分

中级会员

Rank: 3Rank: 3

积分
331
发表于 2023-7-8 10:02:47 | 显示全部楼层
而非为吾问无为谓娃娃
回复 支持 反对

使用道具 举报

5

主题

2万

回帖

69

积分

注册会员

Rank: 2

积分
69
发表于 2023-8-10 16:41:46 | 显示全部楼层
谢谢分享,先下来用用
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-9-1 10:51:04 | 显示全部楼层
飞飞飞飞飞飞飞飞飞飞飞飞飞
回复 支持 反对

使用道具 举报

6

主题

2万

回帖

425

积分

中级会员

Rank: 3Rank: 3

积分
425
发表于 2023-9-16 13:10:44 | 显示全部楼层
谢谢下载来看看
回复 支持 反对

使用道具 举报

29

主题

2万

回帖

194

积分

注册会员

Rank: 2

积分
194
发表于 2023-10-15 13:58:27 | 显示全部楼层
建军节建军节建军节建军节
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-28 06:51 , Processed in 0.065696 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表