Tp5 模型事件的使用


Tp5 模型事件是指在进行模型的写入操作的时候触发的操作行为,包括模型的save方法和delete方法。

模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的

模型类支持before_delete、after_delete、before_write、after_write、before_update、after_update、before_insert、after_insert事件行为。

快捷注册(V5.0.4+)

V5.0.4+版本开始,系统提供了内置的事件注册的快捷方法,你可以用下面的方式替代

beforeInsert新增前

afterInsert新增后

beforeUpdate更新前

afterUpdate更新后

beforeWrite写入前

afterWrite写入后

beforeDelete删除前

afterDelete删除后

官方demo:

namespace app\index\model; use think\Model; class User extends Model {     protected static function init()     {         User::beforeInsert(function ($user) {             if ($user->status != 1) {                 return false;             }         });     } }

以下是处理商品模板使用方法说明:

model 模型代码:

<?php namespace app\admin\model; use think\Model; class Goods extends Model { protected $field=true; protected static function init() { Goods::beforeInsert(function ($goods) { // 新增前,生成商品主图的缩略图 if($_FILES['og_thumb']['tmp_name']){ $thumbName=$goods->upload('og_thumb'); } }); Goods::afterInsert(function($goods){ // 新增后,批量写入会员价格 $mpriceArr=$goods->mp; $goodsId=$goods->id; db('member_price')->insert(['mlevel_id'=>$k,'mprice'=>$v,'goods_id'=>$goodsId]); // 处理商品相册 if($goods->_hasImgs($_FILES['goods_photo']['tmp_name'])){ $files = request()->file('goods_photo'); foreach($files as $file){ // 移动到框架应用根目录/public/uploads/ 目录下 $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/goods'); if($info){ $photoName= $info->getFilename(); $ogphoto=date('Ymd').DS.$photoName; $bigphoto=date('Ymd').DS.'big_'.$photoName; $midphoto=date('Ymd').DS.'mid_'.$photoName; $smphoto=date('Ymd').DS.'sm_'.$photoName; $image = \think\Image::open(IMG_UPLAODS.'goods/'.$ogphoto); $image->thumb(500, 500)->save(IMG_UPLAODS.'goods/'.$bigphoto); $image->thumb(200, 200)->save(IMG_UPLAODS.'goods/'.$midphoto); $image->thumb(70, 70)->save(IMG_UPLAODS.'goods/'.$smphoto); db('goods_photo')->insert(['goods_id'=>$goodsId,'big_photo'=>'goods/'.$bigphoto,'mid_photo'=>'goods/'.$midphoto,'sm_photo'=>'goods/'.$smphoto,'og_photo'=>'goods/'.$ogphoto]); }else{ // 上传失败获取错误信息 echo $file->getError(); } } } }); Goods::beforeDelete(function ($goods) { $goodsId=$goods->id; // 删除前,删除关联的商品属性 db('goods_attr')->where('goods_id','=',$goodsId)->delete(); }); } public function upload($imageName){ // 获取表单上传文件 例如上传了001.jpg $file = request()->file($imageName); // 移动到框架应用根目录/public/uploads/ 目录下 if($file){ $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/goods'); if($info){ // // 成功上传后 获取上传信息 // // 输出 jpg // echo $info->getExtension(); // // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg // echo $info->getSaveName(); // // 输出 42a79759f284b767dfcb2a0197904287.jpg return $info->getFilename(); }else{ // 上传失败获取错误信息 echo $file->getError(); } } } }

controller 控制器代码:

<?php namespace app\admin\controller; use think\Controller; class Goods extends controller {     public function add()     {      if(request()->isPost()){      $data=input('post.');      $add=model('goods')->save($data);      if($add){      $this->success('操作成功!','lst');      }else{      $this->error('操作失败!');      }      return;      }         return view();     }     public function del($id)     {        $del=model('goods')->destroy($id);        if($del){ $this->success('操作成功!','lst'); }else{ $this->error('操作失败!'); }     } }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM