在模型里边的钩子创建与使用方法跟在控制器里边的钩子创建及使用方法是有所区别的
在模型里边创建的钩子,你可以理解为执行一个函数,是无法调用模型里边的类的方法及属性的。
比如系统文件\application\common\model\Order.php
里边的这段代码如下

protected static function success_pay($order_info=[]){
//客户扣款
add_rmb($order_info['uid'],-abs($order_info['pay_money']),0,'购物消费'); //商家入帐
add_rmb($order_info['shop_uid'],abs($order_info['pay_money']),0,'销售商品'); static::send_msg($order_info); get_hook('order_have_pay',$data=[],$order_info,$array=['dirname'=>self::$model_key],$use_common=true,self::$model_key); //钩子扩展
}

这个方法是用户 支付订单款后执行的操作。里边埋了一个钩子。
其中get_hook就是钩子函数,所以他是不能使用类里边的方法与属性的。

这里有一个很特殊的地方,就是增加了第6项参数,指定了当前的频道目录名 $dirname目的是为了避免此模型被其它地方频道或模型调用的时候,无法真实的获取到当前所在频道目录的问题。
同时也给第4项参数 ,$array=['dirname'=>self::$model_key] 特别传递了目录名,方便后面的调用。

上述就是预埋钩子的注意事项。
下面再给出一段代码,讲解如何使用模型钩子。
你可以创建文件

\application\shop\ext\order_have_pay\give_jifen.php
其中 order_have_pay就是钩子标志,give_jifen.php 功能文件名可以随意的。
其中文件是放在\application\shop\ext\这个目录里,代表只能是商城目录调用。如果要其它频道也可以调用的话,就需要换成 \application\common\ext\系统目录
文件里边的具体代码如下

<?php
$uid = $info['uid']; //$info 是订单信息
$webdb = config('webdb.M__'.$array['dirname']); //频道参数
$num = isset($webdb['give_jifen'])?$webdb['give_jifen']:2; //频道设置了赠与积分,就能频道的为标准
if ($num>0) {
add_jifen($uid,2,'购买商品赠送积分');
}

其中 $info及 $array两个变量都是通过函数传进来的。
这里要操作数据库的话,只能用引用

use think\Db;

直接操作数据库

最新文章

  1. php生成网页桌面快捷方式
  2. [iOS] Delphi for iOS 版本需求
  3. HTML-学习笔记(文本格式化,引用,计算机代码)
  4. iOS 蓝牙开发(二)iOS 连接外设的代码实现(转)
  5. Qt-note0906
  6. 9Types of Leader
  7. 对比学习UIKit和AppKit--入门级
  8. 2014年互联网IT待遇【转载】
  9. javascript 检测密码强度
  10. 基于visual Studio2013解决面试题之1105字符串压缩
  11. bzoj-4318 OSU! 【数学期望】
  12. 高吞吐koa日志中间件
  13. JavaWeb项目架构之Kafka分布式日志队列
  14. Linux常用资源(不断改进中)
  15. Android 平台 Native 代码的崩溃捕获机制及实现
  16. Java_Object_Date_System等常用类
  17. python实现可以被with上下文管理的类或函数
  18. VS2013 密钥– 所有版本
  19. thinkphp5 model 模型
  20. Linux-Memcache和Redis常用命令

热门文章

  1. Luogu1769 淘汰赛制_NOI导刊2010提高(01)(概率DP)
  2. JUC源码学习笔记5——线程池,FutureTask,Executor框架源码解析
  3. docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】
  4. 窗口部件-基础窗口部件 QWidget
  5. K8S部署超过节点的Pod
  6. CentOS7_K8S安装指南
  7. 发现tab换成空格不起作用,然后解决如下。
  8. Java开发学习(三十三)----Maven私服(一)私服简介安装与私服分类
  9. 在Windows 2012 R2上安装vcenter 5.5
  10. Elastic:使用ElastAlert发送通知