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函数
Oct 09 PHP
PHP程序开发范例学习之表单 获取文本框的值
Aug 08 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
php 批量替换程序的具体实现代码
Oct 04 PHP
php实现上传图片生成缩略图示例
Apr 13 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
php实现搜索类封装示例
Mar 31 PHP
Laravel实现表单提交
May 07 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 PHP
PHP高并发和大流量解决方案整理
Mar 09 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 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 Pear 安装及使用
2009/03/19 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
yii2 数据库读写分离配置示例
2017/02/10 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
fmt:formatDate的输出格式详解
2014/01/09 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
js打造数组转json函数
2015/01/14 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
js前端面试之同步与异步问题详解
2019/04/03 Javascript
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
python调用cmd复制文件代码分享
2013/12/27 Python
深入浅析python 中的匿名函数
2018/05/21 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
python学生管理系统
2019/01/30 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
会话Bean的种类
2013/11/07 面试题
自考生自我鉴定范文
2013/10/01 职场文书
探亲邀请信范文
2014/01/30 职场文书
员工拓展培训方案
2014/02/15 职场文书
现场施工员岗位职责
2014/03/10 职场文书
理想演讲稿范文
2014/05/21 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
高一军训决心书
2015/02/05 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript
Python经常使用的一些内置函数
2022/04/11 Python