- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
thinkphp开发图片上传,图片异步上传是目前比较方便的功能,这里我就不写css文件了,将代码写出来。引入核心文件下载https://github.com/carlcarl/A... HTML
现在谁不开发接口的呢?但是在接口开发过程中,报错误html">异常后居然返回错误的信息依然是html信息!TP官方也不知道为啥不添加,说好的为接口而生,我的解决方案也很简单,把系统的
thinkphp 抓取网站的内容并且保存到本地的实例详解 我需要写这么一个例子,到电子课本网下载一本电子书。 电子课本网的电子书,是把书的每一页当成一个图片,然后一本书就是有很多张图片,我需要批
假设数据库中会计科目数据表的字段为:id,code,name,islast。分别为自增主键,科目编码,科目名称,是否为末级("1"表示末级科目)。 这里在Thinkphp的模型
本文实例讲述了thinkphp+phpexcel实现excel报表输出功能。分享给大家供大家参考,具体如下: 准备工作: 1.下载phpexcel1.7.6类包; 2.解压至tp框架的thin
ThinkPHP 内置的模板引擎来定义模板文件,以及使用加载文件、模板布局和模板继承等高级功能。 每个模板文件在执行过程中都会生成一个编译后的缓存文件,其实就是一个可以运行的 PHP 文件。 引
本文实例讲述了thinkPHP+ajax实现统计页面pv浏览量的方法。分享给大家供大家参考,具体如下: 统计pv量很常用,下面的代码用ajax实现的,使用ajax可以避免页面缓存造成的影响,只要客
在很多网站中都会有使用404页面的时候,在ThinkPHP框架中该如何设置呢,接下来我介绍其中一种方法 1、首先要在Lib/Action 下建立EmptyAction.class.php模块 内容
话不多说,请看代码: ? 1
ThinkPHP 模板substr的截取字符串函数 在Common/function.php加上以下代码 ?
先上效果图: 那个file按钮样式先忽略 点击选择图片(浏览),随便选一张图片 js代码如下 ?
本文实例分析了thinkPHP js文件中U方法不被解析问题。分享给大家供大家参考,具体如下: 我想在js文件中写ajax, 写完发现异常, 本以为是js文件中不支持ajax 后来发现时地址
使用TP 3.2框架 ? 1
本文实例讲述了thinkphp,onethink和thinkox中验证码不显示的解决方法。分享给大家供大家参考,具体如下: 使用验证码的时候,一开始正常,后来不显示了 网上说是utf-8的编码问
1、基础知识 1.手机APP的类型 移动端的应用有这几种:WebApp,NativeApp,HybridApp。 WebApp 就是手机网站,需要用手机浏览器访问。 NativeApp是用
ThinkPHP CURD操作的查询方法中最常用但也是最复杂的就是where方法。where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置。 where方法的用法是ThinkPH
ThinkPHP CURD方法的limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多。并且ThinkPHP的limit方法可以兼容所有的数据库驱动类
ThinkPHP CURD方法的page方法也是模型连贯操作方法之一,是完全为分页查询而诞生的一个人性化操作方法。 用法 我们在前面已经分析了关于limit方法用于分页查询的情况,而page方法则
ThinkPHP CURD方法的table方法也属于模型类的连贯操作方法之一,该方法主要用于指定操作的数据表。 具体用法如下: 一般情况下,操作模型的时候系统能够自动识别当前对应的数据表,所以,
ThinkPHP CURD方法的order方法属于模型的连贯操作方法之一,该方法用于对操作的结果排序。 具体用法如下: ?
我是一名优秀的程序员,十分优秀!