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 开发环境配置(Zend Server安装)
Apr 28 PHP
PHP 数组基础知识小结
Aug 20 PHP
解析PayPal支付接口的PHP开发方式
Nov 28 PHP
php页面防重复提交方法总结
Nov 25 PHP
CI框架中site_url()和base_url()的区别
Jan 07 PHP
php生成图片缩略图的方法
Apr 07 PHP
使用PHP编写发红包程序
Jul 22 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
PHP自动补全表单的两种方法
Mar 06 PHP
PHP实现多图上传和单图上传功能
May 17 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
php ftp文件上传函数(基础版)
2010/06/03 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
javascript 写类方式之一
2009/07/05 Javascript
JavaScript限定复选框的选择个数示例代码
2013/08/25 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
javascript检查某个元素在数组中的索引值
2016/03/30 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
简单谈谈axios中的get,post方法
2017/06/25 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
2015/05/22 Python
Python编码类型转换方法详解
2016/07/01 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
市场营销职业生涯规划书范文
2014/01/12 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
2015年党性分析材料
2014/12/19 职场文书
西岭雪山导游词
2015/02/06 职场文书
2015年班组长工作总结
2015/04/10 职场文书
Redis分布式锁的7种实现
2022/04/01 Redis