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中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
两级联动select刷新后其值保持不变的实现方法
Jan 27 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
Aug 28 PHP
php列出mysql表所有行和列的方法
Mar 13 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
Mar 21 PHP
PHP中file_exists使用中遇到的问题小结
Apr 05 PHP
Yii控制器中操作视图js的方法
Jul 04 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
php批量删除操作(数据访问)
May 23 PHP
PHP实现常用排序算法的方法
Feb 05 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中的Session和Cookie
2013/06/21 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
2010/03/04 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
Python实现的ini文件操作类分享
2014/11/20 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Python3字符串学习教程
2015/08/20 Python
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
python数据化运营的重要意义
2019/11/25 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
没编程基础可以学python吗
2020/06/17 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
PHP数据运算类型都有哪些
2013/11/05 面试题
构造器Constructor是否可被override?
2013/08/06 面试题
无工作经验者个人求职信范文
2013/12/22 职场文书
教师党性分析材料
2014/02/04 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
中秋联欢会主持词
2015/07/04 职场文书