在模型里边创建的钩子,你可以理解为执行一个函数,是无法调用模型里边的类的方法及属性的。
比如系统文件`applicationcommonmodelOrder.php`
里边的这段代码如下
protected static function success_pay($order_info=[]){r
//客户扣款r
add_rmb($order_info['uid'],-abs($order_info['pay_money']),0,'购物消费');r
r
//商家入帐r
add_rmb($order_info['shop_uid'],abs($order_info['pay_money']),0,'销售商品');r
r
static::send_msg($order_info);r
r
get_hook('order_have_pay',$data=[],$order_info,$array=['dirname'=>self::$model_key],$use_common=true,self::$model_key); //钩子扩展r
}
这个方法是用户 支付订单款后执行的操作。里边埋了一个钩子。
其中`get_hook`就是钩子函数,所以他是不能使用类里边的方法与属性的。
这里有一个很特殊的地方,就是增加了第6项参数,指定了当前的频道目录名 `$dirname`目的是为了避免此模型被其它地方频道或模型调用的时候,无法真实的获取到当前所在频道目录的问题。
同时也给第4项参数 `,$array=['dirname'=>self::$model_key]` 特别传递了目录名,方便后面的调用。
上述就是预埋钩子的注意事项。
下面再给出一段代码,讲解如何使用模型钩子。
你可以创建文件
`applicationshopextorder_have_paygive_jifen.php`
其中 `order_have_pay`就是钩子标志,`give_jifen.php` 功能文件名可以随意的。
其中文件是放在`applicationshopext`这个目录里,代表只能是商城目录调用。如果要其它频道也可以调用的话,就需要换成 `applicationcommonext`系统目录
文件里边的具体代码如下
$uid = $info['uid']; //$info 是订单信息r
$webdb = config('webdb.M__'.$array['dirname']); //频道参数r
$num = isset($webdb['give_jifen'])?$webdb['give_jifen']:2; //频道设置了赠与积分,就能频道的为标准r
if ($num>0) {r
add_jifen($uid,2,'购买商品赠送积分');r
}
其中 `$info`及 `$array`两个变量都是通过函数传进来的。
这里要操作数据库的话,只能用引用
use thinkDb;
直接操作数据库
,



