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和XSS跨站攻击的防范
Apr 17 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
php中如何防止表单的重复提交
Aug 02 PHP
php多用户读写文件冲突的解决办法
Nov 06 PHP
thinkphp3查询mssql数据库乱码解决方法分享
Feb 11 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
php文件上传后端处理小技巧
May 22 PHP
Yii统计不同类型邮箱数量的方法
Oct 18 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
PHP设计模式之观察者模式定义与用法分析
Apr 04 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
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
实例讲解通过​PHP创建数据库
2019/01/20 PHP
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
python实现的简单窗口倒计时界面实例
2015/05/05 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
使用Tensorflow实现可视化中间层和卷积层
2020/01/24 Python
python入门之井字棋小游戏
2020/03/05 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
通过代码实例了解Python异常本质
2020/09/16 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
瑞典时尚耳机品牌:Urbanears
2017/07/26 全球购物
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
联想台湾官网:Lenovo TW
2018/05/09 全球购物
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
How TDD works
2012/09/30 面试题
公司总经理岗位职责
2014/03/15 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android