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 相关文章推荐
基于mysql的论坛(1)
Oct 09 PHP
在PHP中使用curl_init函数的说明
Nov 02 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
php获取新浪微博数据API实例
Nov 12 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
微信公众号判断用户是否已关注php代码解析
Jun 24 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
PHP基于pdo的数据库操作类【可支持mysql、sqlserver及oracle】
May 21 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 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自动适应范围的分页代码
2008/08/05 PHP
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
php简单实现无限分类树形列表的方法
2015/03/27 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
Ext grid 添加右击菜单
2009/11/26 Javascript
这些年、我收集的JQuery代码小结
2012/08/01 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
如何动态加载外部Javascript文件
2015/12/02 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
AngularGauge 属性解析详解
2016/09/06 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
2019/12/13 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
python中import与from方法总结(推荐)
2019/03/21 Python
pycharm激活码有效到2020年11月底
2020/09/18 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
房地产还款计划书
2014/01/10 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
消防志愿者活动方案
2014/08/23 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
2014年财务工作总结与计划
2014/12/08 职场文书