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 相关文章推荐
再次研究下cache_lite
Feb 14 PHP
PHP技术开发技巧分享
Mar 23 PHP
php Static关键字实用方法
Jun 04 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
THINKPHP支持YAML配置文件的设置方法
Mar 17 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
PHP入门教程之图像处理技巧分析
Sep 11 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
Laravel框架查询构造器简单示例
May 08 PHP
thinkphp5实现微信扫码支付
Dec 23 PHP
PHP7 错误处理机制修改
Mar 09 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
一个简单计数器的源代码
2006/10/09 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
基于JavaScript实现简单的音频播放功能
2018/01/07 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
python实现ipsec开权限实例
2014/11/11 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
深入解析Python中的上下文管理器
2016/06/28 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
Python 画出来六维图
2019/07/26 Python
python tkinter组件摆放方式详解
2019/09/16 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
模具专业毕业生自荐书范文
2014/02/19 职场文书
报关员个人职业生涯规划书
2014/03/12 职场文书
全国优秀教师事迹材料
2014/08/26 职场文书
党员演讲稿
2014/09/04 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
分享提高 Python 代码的可读性的技巧
2022/03/03 Python