Thinkphp 框架扩展之行为扩展原理与实现方法分析


Posted in PHP onApril 23, 2020

本文实例讲述了Thinkphp 框架扩展之行为扩展原理与实现方法。分享给大家供大家参考,具体如下:

系统核心提供的标签位置包括下面几个(按照执行顺序排列):

app_init 应用初始化标签位
path_info PATH_INFO检测标签位
app_begin 应用开始标签位
action_name 操作方法名标签位
action_begin 控制器开始标签位
view_begin 视图输出开始标签位
view_parse 视图解析标签位
template_filter 模板内容解析标签位
view_filter 视图输出过滤标签位
view_end 视图输出结束标签位
action_end 控制器结束标签位
app_end 应用结束标签位

在每个标签位置,可以配置多个行为定义,行为的执行顺序按照定义的顺序依次执行。除非前面的行为里面中断执行了(某些行为可能需要中断执行,例如检测机器人或者非法执行行为),否则会继续下一个行为的执行。 行为定义: 通过Common\Conf\tags.php配置文件定义,格式如下:

<?php
return array(
  'action_begin'=>array('Home\\Behaviors\\TestBehavior','Home\\Behaviors\\Test1Behavior'), 
);

上面注册了两个行为,分别是Home模块下的test和test1行为,类文件位于Home模块目录下的Behaviors目录,可以自定义目录。

行为必须是一个包含命名空间路径的类,如上的 Home\Behaviors\TestBehavior 对应的类是 Home/Behaviors/TestBehavior.class.php

除了这些系统内置标签之外,开发人员还可以在应用中添加自己的应用标签。 比如在控制器的_initialize方法中:

\Think\Hook::add('action_begin','Home\\Behaviors\\TestBehavior');
//同时添加多个行为,只要将第二个参数换成数组即可。

行为类的定义,以上面的test行为为例:

<?php
namespace Home\Behaviors;
class TestBehavior extends \Think\Behavior{
  //行为执行入口
  public function run(&$param){
 
  }
}

行为类建议继承\Think\Behavior,必须实现run(&$param)方法,行为是通过这个方法执行的。

行为的触发: 只要在合适的地方通过以下代码

\Think\Hook::listen('标签名'[,参数]);
// 或者
// tag('标签名'[,参数]);

当应用执行到这个地方的时候将自动触发指定标签名下的所有行为类。

isten方法可以传入并且只接受一个参数,如果需要传入多个参数,请使用数组,该参数为引用传值,所以只能传入变量。 参数可以被run(&$param)中的$param接收。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP网上调查系统
Oct 09 PHP
PHP个人网站架设连环讲(四)
Oct 09 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
Sep 02 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
Apr 23 #PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 #PHP
Thinkphp 框架扩展之类库扩展操作详解
Apr 23 #PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 #PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
Apr 22 #PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 #PHP
PHP 实现 WebSocket 协议原理与应用详解
Apr 22 #PHP
You might like
PHP新手上路(十二)
2006/10/09 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
功能强大的php分页函数
2016/07/20 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
javascript 年月日联动实现核心代码
2009/12/21 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
工作中常用到的JS表单验证代码(包括例子)
2010/11/11 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
js实现前端图片上传即时预览功能
2017/08/02 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
python3 判断列表是一个空列表的方法
2018/05/04 Python
基于python监控程序是否关闭
2020/01/14 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
html5实现滑块功能之type=&quot;range&quot;属性
2020/02/18 HTML / CSS
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
小学信息技术教学反思
2014/02/10 职场文书
协议书的格式
2014/04/23 职场文书
开服装店计划书
2014/08/15 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
小学思品教学反思
2016/02/20 职场文书
golang 实现并发求和
2021/05/08 Golang