第37课 thinkphp5添加商品基本信息及通过后置钩子上传商品主图 模型事件(勾子函数)

目录


手册地址:

https://www.kancloud.cn/manual/thinkphp5/135195

before_insert(新增之前的操作)

要实现的功能

在新增数据之前生成三张缩略图片,然后再插入数据
添加商品基本信息及通过后置钩子上传商品主图

触发条件:

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 static function init()
{
    /**
    * Goods指当前模型,也可以用self
    * beforeInsert 控制器调用本模型sava()方法保存之前的操作
    * $goods回调的数据,即控制器调用model保存时要存入的数据
    */
    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;
    });
}

猜你喜欢

转载自www.cnblogs.com/haima/p/9829402.html