zoukankan      html  css  js  c++  java
  • 第37课 thinkphp5添加商品基本信息及通过前置钩子上传商品主图 模型事件(勾子函数)

    目录

    手册地址:

    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 = 	hinkImage::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;
        });
    }
    
  • 相关阅读:
    Python写一个简单的爬虫
    Fully Convolutional Networks for Semantic Segmentation 译文
    Numpy中矩阵和数组的区别
    Linux(ubuntu)软件的安装
    Linux 打包和压缩
    Linux的软连接、硬链接和find命令
    Linux组管理、用户管理、查看用户信息、usermod、which、切换用户、修改文件具体权限
    Linux用户权限
    Linux远程管理命令
    Linux文件和目录相关的命令
  • 原文地址:https://www.cnblogs.com/haima/p/9829402.html
Copyright © 2011-2022 走看看