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程序
Feb 04 PHP
php5.2以下版本无json_decode函数的解决方法
May 25 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
PHP运行模式汇总
Nov 06 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
php实现的读取CSV文件函数示例
Feb 07 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
Oct 02 PHP
Laravel 读取 config 下的数据方法
Oct 13 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提示undefined index的几种解决方法
2012/05/21 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
ie支持function.bind()方法实现代码
2012/12/27 Javascript
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
jquery清空表单数据示例分享
2014/02/13 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
2014/06/29 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
如何用javascript计算文本框还能输入多少个字符
2015/07/29 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
医院后勤自我鉴定
2013/10/13 职场文书
新教师工作感言
2014/02/16 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
三潭印月的导游词
2015/02/12 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
win10安装配置nginx的过程
2021/03/31 Servers