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获取mysql数据库中的所有表名的代码
Apr 23 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
Jun 03 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
Jun 23 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
Jun 22 PHP
php中error与exception的区别及应用
Jul 28 PHP
php中print(),print_r(),echo()的区别详解
Dec 01 PHP
PHP中preg_match函数正则匹配的字符串长度问题
May 27 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 PHP
php+redis消息队列实现抢购功能
Feb 08 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 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
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
PHP7新特性
2021/03/09 PHP
XENON基于JSON变种
2010/07/27 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
2019/07/23 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
英国最大的海报商店:GB Posters
2018/03/20 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
JavaScript获取当前url根目录(路径)
2014/02/19 面试题
党员培训思想汇报
2014/01/07 职场文书
高三历史教学反思
2014/01/09 职场文书
书香家庭事迹材料
2014/05/09 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书