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 相关文章推荐
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 PHP
php记录代码执行时间(实现代码)
Jul 05 PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 PHP
在WordPress的文章编辑器中设置默认内容的方法
Dec 29 PHP
php 解析xml 的四种方法详细介绍
Oct 26 PHP
静态html文件执行php语句的方法(推荐)
Nov 21 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP中cookie知识点学习
May 06 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 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,不用COM,生成excel文件
2006/10/09 PHP
几种显示数据的方法的比较
2006/10/09 PHP
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
PHP PDOStatement::fetchAll讲解
2019/01/31 PHP
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
javascript 数组操作详解
2015/01/29 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
Python模块学习 datetime介绍
2012/08/27 Python
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
Python3 元组tuple入门基础
2020/02/09 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Python request中文乱码问题解决方案
2020/09/17 Python
Python识别验证码的实现示例
2020/09/30 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
html5时钟实现代码
2010/10/22 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
医院院务公开实施方案
2014/05/03 职场文书
班子群众路线教育实践个人对照检查材料思想汇报
2014/09/30 职场文书
2014年感恩节活动策划方案
2014/10/06 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
文明单位汇报材料
2014/12/24 职场文书
工作经历证明范本
2015/06/15 职场文书
捐书仪式主持词
2015/07/04 职场文书
公司车辆维修管理制度
2015/08/05 职场文书