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学习之 认清变量的作用范围
Jan 26 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
Dec 06 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
使用 PHPStorm 开发 Laravel
Mar 24 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
php安装dblib扩展,连接mssql的具体步骤
Mar 02 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
php获取小程序码的实现代码(B类接口)
Jun 13 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
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
PHP多线程抓取网页实现代码
2010/07/22 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
php修改数组键名的方法示例
2017/04/15 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
PHP ElasticSearch做搜索实例讲解
2020/02/05 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
js中传递特殊字符(+,&)的方法
2014/01/16 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
node.js学习笔记之koa框架和简单爬虫练习
2018/12/13 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
利用Python抓取行政区划码的方法
2016/11/28 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Python实现读取json文件到excel表
2017/11/18 Python
解决python replace函数替换无效问题
2020/01/18 Python
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
美国在线购买内衣网站:HerRoom
2020/02/22 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
检举信的格式及范文
2014/04/04 职场文书
解除劳动合同证明书
2014/09/26 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
JavaScript流程控制(循环)
2021/12/06 Javascript
详解pytorch创建tensor函数
2022/03/22 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫