haima

目录

手册地址:

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

before_insert(新增之前的操作)

要实现的功能

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

思路

  1. 控制器里调用模型的save()方法保存数据
  2. 模型里的用前置勾子beforeInsert()保存之前把上传原图片先成三张缩略到指定的目录里
  3. 再把三张缩略图的和原图片的地址拼装好,放到对应的表字段里.如: $goods->og_thumb=$ogThumb;
  4. 模型里执行完前置勾子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;
    });
}

分类:

技术点:

相关文章:

  • 2022-01-14
  • 2022-02-10
  • 2022-12-23
  • 2021-12-04
  • 2022-12-23
  • 2022-12-23
  • 2021-08-13
  • 2021-08-02
猜你喜欢
  • 2022-12-23
  • 2021-05-01
  • 2022-12-23
  • 2022-12-23
  • 2021-10-05
  • 2022-12-23
相关资源
相似解决方案