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 相关文章推荐
构建简单的Webmail系统
Oct 09 PHP
php数据库连接时容易出错的特殊符号问题
Sep 01 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
May 08 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
PHP return语句的另一个作用
Jul 30 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
php 广告点击统计代码(php+mysql)
Feb 21 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
php桥接模式应用案例分析
Oct 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 Token(令牌)设计
2008/03/15 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
javascript字母大小写转换的4个函数详解
2014/05/09 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
JSON字符串转JSON对象
2015/07/31 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
深入理解React高阶组件
2017/09/28 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
2017/12/14 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
Nike西班牙官方网站:Nike.com (ES)
2017/10/30 全球购物
Surfdome西班牙:世界上最受欢迎的生活方式品牌
2019/02/13 全球购物
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
总经理岗位职责描述
2014/02/08 职场文书
优秀应届生求职信
2014/06/16 职场文书
经典毕业生求职信
2014/07/12 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
初中作文评语
2014/12/25 职场文书
求职信格式范文
2015/03/19 职场文书
电影雨中的树观后感
2015/06/15 职场文书
运动会加油稿
2015/07/22 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书