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中随机显示图片的函数代码
Jun 23 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
php创建桌面快捷方式实现方法
Dec 31 PHP
php 流程控制switch的简单实例
Jun 07 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
PHP命名空间与自动加载类详解
Sep 04 PHP
基于laravel where的高级使用方法
Oct 10 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 PHP
laravel使用redis队列实例讲解
Mar 23 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和ACCESS写聊天室(六)
2006/10/09 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
php中namespace及use用法分析
2016/12/06 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
基于JavaScript实现仿京东图片轮播效果
2015/11/06 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
js控住DOM实现发布微博效果
2016/08/30 Javascript
JavaScript严格模式下关于this的几种指向详解
2017/07/12 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
vue移动端实现下拉刷新
2018/04/22 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
vue中echarts图表大小适应窗口大小且不需要刷新案例
2020/07/19 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
Python异常的检测和处理方法
2018/10/26 Python
python ---lambda匿名函数介绍
2019/03/13 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
python实例化对象的具体方法
2020/06/17 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
2020/07/13 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
HTML5中的新元素介绍
2008/10/17 HTML / CSS
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
外语学院毕业生的自我鉴定
2013/11/28 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
高三生物教学反思
2016/02/22 职场文书