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 相关文章推荐
一个改进的UBB类
Oct 09 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 PHP
php摘要生成函数(无乱码)
Feb 04 PHP
PHP 面向对象详解
Sep 13 PHP
php生成扇形比例图实例
Nov 06 PHP
php时间戳转换的示例
Mar 31 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
10个实用的PHP正则表达式汇总
Oct 23 PHP
PHP实现获取中英文首字母
Jun 19 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
php对微信支付回调处理的方法
Aug 23 PHP
laravel框架创建授权策略实例分析
Nov 22 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 中的一些经验积累
2006/10/09 PHP
新闻分类录入、显示系统
2006/10/09 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
2014/06/12 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
PHP的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
javascript中的对象创建 实例附注释
2011/02/08 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
微信分享调用jssdk实例
2017/06/08 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
10款最好的Web开发的 Python 框架
2015/03/18 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
Python实现调度算法代码详解
2017/12/01 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
Python中如何定义一个函数
2016/09/06 面试题
汉语言文学毕业生求职信
2013/10/01 职场文书
质检的岗位职责
2013/11/17 职场文书
我的网上商城创业计划书
2013/12/26 职场文书
购房协议书
2014/04/11 职场文书
信息员培训方案
2014/06/12 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
重阳节标语大全
2014/10/07 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
JS实现简单九宫格抽奖
2022/06/28 Javascript