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中的一个中文字符串截取函数
Feb 14 PHP
PHP设计模式 注册表模式
Feb 05 PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
CodeIgniter分页类pagination使用方法示例
Mar 28 PHP
使用Yii2实现主从数据库设置
Nov 20 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
php分享朋友圈的实现代码
Feb 18 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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中for循环语句的几种变型
2007/03/16 PHP
php生成xml简单实例代码
2009/12/16 PHP
基于php-fpm的配置详解
2013/06/03 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
python sort、sorted高级排序技巧
2014/11/21 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
解决python 输出是省略号的问题
2018/04/19 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
如何更优雅地写python代码
2019/07/02 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
HTML5几个设计和修改的页面范例分享
2015/09/29 HTML / CSS
为什么UNION ALL比UNION快
2016/03/17 面试题
超市业务员岗位职责
2013/12/05 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
财务人员个人工作总结
2015/02/27 职场文书
物流业务员岗位职责
2015/04/03 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书