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
通过对php一些服务器端特性的配置加强php的安全
Oct 09 PHP
PHP编程之高级技巧——利用Mysql函数
Oct 09 PHP
php基础知识:类与对象(5) static
Dec 13 PHP
php操作xml
Oct 27 PHP
PHP静态文件生成类实例
Nov 29 PHP
ThinkPHP实现动态包含文件的方法
Nov 29 PHP
php绘制一个矩形的方法
Jan 24 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
ThinkPHP文件缓存类代码分享
Apr 22 PHP
php实现的中文分词类完整实例
Feb 06 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 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安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/02/09 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
基于jQuery实现放大镜特效
2020/10/19 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
js中的闭包实例展示
2018/11/01 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
jQuery实现简单轮播图效果
2020/12/27 jQuery
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
Python3.4编程实现简单抓取爬虫功能示例
2017/09/14 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
使用python实现飞机大战游戏
2020/03/23 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
如何利用python进行时间序列分析
2020/08/04 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
如何写出高性能的JSP和Servlet
2013/01/22 面试题
小学生安全责任书
2014/07/25 职场文书
七一讲话心得体会
2014/09/05 职场文书
学生喝酒检讨书500字
2014/11/02 职场文书