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+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
php自动获取关键字的方法
Jan 06 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 PHP
php 可变函数使用小结
Jun 12 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
php的RSA加密解密算法原理与用法分析
Jan 23 PHP
PHP实现常用排序算法的方法
Feb 05 PHP
laravel admin实现分类树/模型树的示例代码
Jun 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
人族 Terran 基本策略
2020/03/14 星际争霸
基于PHP编程注意事项的小结
2013/04/27 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
PHP7 新增功能
2021/03/09 PHP
html下载本地
2006/06/19 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
微信小程序Echarts图表组件使用方法详解
2019/06/25 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
使用Python操作MySQL的一些基本方法
2015/08/16 Python
python web框架学习笔记
2016/05/03 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
NET程序员上机面试题
2015/05/23 面试题
英语生日邀请函
2014/01/23 职场文书
庆元旦活动总结
2014/07/09 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
爱晚亭导游词
2015/02/09 职场文书
圆明园观后感
2015/06/03 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang
用python修改excel表某一列内容的操作方法
2021/06/11 Python
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android
Python查找算法的实现 (线性、二分,分块、插值查找算法)
2022/04/24 Python
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技