php上传商品信息并显示,第37课 thinkphp5添加商品基本信息及通过前置钩子上传商品主图 模型事件(勾子函数)...

[TOC]

手册地址:

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;

});

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值