目录
- 手册地址:
- before_insert(新增之前的操作)
- 要实现的功能
- 思路
- 触发条件:
- 1. 控制器里必须要调用模型的
save()
方式保存数据,用insert()
触发不了勾子函数的 - 2. 模型初使化init()里使用
Goods::beforeInsert
- 1. 控制器里必须要调用模型的
手册地址:
https://www.kancloud.cn/manual/thinkphp5/135195
before_insert(新增之前的操作)
要实现的功能
上传原图片,在新增数据之前生成三张缩略图片,然后再插入数据
添加商品基本信息及通过后置钩子上传商品主图
思路
- 控制器里调用模型的
save()
方法保存数据 - 模型里的用前置勾子
beforeInsert()
保存之前把上传原图片先成三张缩略到指定的目录里 - 再把三张缩略图的和原图片的地址拼装好,放到对应的表字段里.如:
$goods->og_thumb=$ogThumb;
- 模型里执行完前置勾子
beforeInsert()
函数后(把要保存的数据处理好),控制器里就会把数据save到表里.
触发条件:
1. 控制器里必须要调用模型的save()
方式保存数据,用insert()
触发不了勾子函数的
$add=model('goods')->save($data);
控制器里
$add=model('goods')->save($data);
public function add()
{if(request()->isPost()){$data=input('post.');// dump($data); die;//验证// dump($_FILES);die;$validate = validate('goods');if(!$validate->check($data)){$this->error($validate->getError());}$add=model('goods')->save($data);if($add){$this->success('添加商品成功!','lst');}else{$this->error('添加商品失败!');}return;}
}
2. 模型初使化init()里使用 Goods::beforeInsert
模型里
protected $field=true;//当插入到当然模型对应表里不存在的字段时,会被忽略掉
protected static function init()
{/*** Goods指当前模型,也可以用self* beforeInsert 控制器调用本模型sava()方法保存之前的操作* $goods回调的数据,即控制器调用model保存时要存入的数据* 调用下面的upload函数时要用$goods(当前类的实例对象)去调用*/Goods::beforeInsert(function ($goods) {// 生成商品主图的三张缩略图if($_FILES['og_thumb']['tmp_name']){$thumbName=$goods->upload('og_thumb');$ogThumb=date("Ymd"). DS . $thumbName;$bigThumb=date("Ymd"). DS . 'big_'.$thumbName;$midThumb=date("Ymd"). DS . 'mid_'.$thumbName;$smThumb=date("Ymd"). DS . 'sm_'.$thumbName;$image = \think\Image::open(IMG_UPLOADS.$ogThumb);$image->thumb(config('big_thumb_width'), config('big_thumb_height'))->save(IMG_UPLOADS.$bigThumb);$image->thumb(config('mid_thumb_width'), config('mid_thumb_height'))->save(IMG_UPLOADS.$midThumb);$image->thumb(config('sm_thumb_width'), config('sm_thumb_height'))->save(IMG_UPLOADS.$smThumb);$goods->og_thumb=$ogThumb;$goods->big_thumb=$bigThumb;$goods->mid_thumb=$midThumb;$goods->sm_thumb=$smThumb;}$goods->goods_code=time().rand(111111,999999);//商品编号// dump($ogThumb); die;});
}