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获取后台Job管理的实现代码
Jun 10 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
浅析php过滤html字符串,防止SQL注入的方法
Jul 02 PHP
Windows7下的php环境配置教程
Feb 28 PHP
php实现将Session写入数据库
Jul 26 PHP
php通过文件头判断格式的方法
May 28 PHP
PHP获取访问页面HTTP状态码的实现代码
Nov 03 PHP
Laravel5.5新特性之友好报错以及展示详解
Aug 13 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 PHP
PHP实现微信提现功能(微信商城)
Nov 21 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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
PDO::setAttribute讲解
2019/01/29 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
如何实现JS函数的重载
2006/09/22 Javascript
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
详解python单例模式与metaclass
2016/01/15 Python
Python编程实现数学运算求一元二次方程的实根算法示例
2017/04/02 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
详解python的四种内置数据结构
2019/03/19 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
python os模块在系统管理中的应用
2020/06/22 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
班级口号大全
2014/06/09 职场文书
主题党日活动总结
2014/07/08 职场文书
2014年变电站工作总结
2014/12/19 职场文书
生日答谢词
2015/01/05 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang