thinkPHP中钩子的使用方法实例分析


Posted in PHP onNovember 16, 2017

本文实例讲述了thinkPHP中钩子的使用方法。分享给大家供大家参考,具体如下:

前面介绍过thinkPHP中钩子的两种配置调用方法,这里来进一步分析一下钩子的使用方法。

1 创建钩子行为:

我们自己定义的标签位可以直接放在Think\Behaviors中,也可以放在应用目录中,比如说Home模块下,新建一个Behaviors的文件夹,在文件夹内新建

标签名+Behavior.class.PHP

注:需要带Behavior的原因,见代码:

static public function exec($name, $tag,&$params=NULL) {
    if('Behavior' == substr($name,-8) ){
      // 行为扩展必须用run入口方法
      $tag  =  'run';
    }
    $addon  = new $name();
    return $addon->$tag($params);
}

在这里我自己自定义的标签名是My

namespace Behavior;
use Think\Behavior;
class MyBehavior extends Behavior
{
  public function run(&$arg){
    echo 'Thinkphp 中的'.$arg['name'].'功能,'.$arg['value'].'中...';
  }
}

注意类名大小写

2 将钩子添加进钩子集中

方法一(手动注册):直接在控制器中添加:

Hook::add('addd','Behavior\\adBehavior');

方法二(自动注册):

在Conf文件夹里面(完整路径D:\think\application\Home\Conf\tags.php,当然这是我的情况)tags.php的内容:

return array(
//'action_begin'=>array('Home\\Behaviors\\test','Home\\Behaviors\\test'),
 //一个标签位可以有多个行为,使用数组即可。
 // 如果是3.2.1版本 则需要改成
 // 'action_begin'=>array('Home\\Behaviors\\testBehavior','Home\\Behaviors\\testBehavior'),
 'my'=>array('Behaviors\\MyBehavior')
);

3 添加监听:(我这里才用模板中直接监听使用)

此处如果报找不到hook方法,请在ThinkPHP/Common/functions.php中添加(当然也可以在其他公共文件):

function hook($hook,$params= array()){
  \Think\Hook::listen($hook,$params);
}

最后在模板中使用:

{:hook('my', array('name'=>'钩子','value'=>'学习'))}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP安装攻略:常见问题解答(一)
Oct 09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
CodeIgniter基本配置详细介绍
Nov 12 PHP
php导出word格式数据的代码实例
Nov 25 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
最新最全PHP生成制作验证码代码详解(推荐)
Jun 12 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
Jun 17 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
Nov 10 PHP
php表单处理操作
Nov 16 #PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 #PHP
Laravel下生成验证码的类
Nov 15 #PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 #PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 #PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 #PHP
PHP中递归的实现实例详解
Nov 14 #PHP
You might like
PHP利用COM对象访问SQLServer、Access
2006/10/09 PHP
动态新闻发布的实现及其技巧
2006/10/09 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php分割合并两个字符串的函数实例
2015/06/19 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
2020/08/18 Javascript
一篇不错的Python入门教程
2007/02/08 Python
python的类变量和成员变量用法实例教程
2014/08/25 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
Manjaro、pip、conda更换国内源的方法
2020/11/17 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
局域网定义和特性
2016/01/23 面试题
营销与策划应届生求职信
2013/11/04 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
Python制作春联的示例代码
2022/01/22 Python