目录

手册地址:

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;
});
}

第37课 thinkphp5添加商品基本信息及通过前置钩子上传商品主图 模型事件(勾子函数)的更多相关文章

  1. ecshop 后台批量上传商品 完整上传

    ecshop 后台批量上传商品,之所以无法上传,是因为后台上传php文件方法中没有导入商品原图路径 将ecshop根目录中的admin/goods_batch.php文件全部修改为 <?php ...

  2. TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片

    **TP5+阿里云OSS上传文件第三节,实现淘宝上传商品图片首先我们来看看淘宝的功能和样式:** 之后看看制作完成的演示:(由于全部功能弄成GIF有点大,限制上传大小好像在1M之内,压缩之后也有1.9 ...

  3. ssh整合问题总结--在添加商品模块实现图片(文件)的上传

    今天在做毕设(基于SSH的网上商城项目)中碰到了一个文件上传的需求,就是在后台管理员的商品模块中,有一个添加商品,需要将磁盘上的图片上传到tomcat保存图片的指定目录中: 完成这个功能需要两个步,第 ...

  4. [py][mx]django添加后台课程机构页数据-图片上传设置

    分析下课程页前台部分 机构类别-目前机构库中没有这个字段,需要追加下 所在地区 xadmin可以手动添加 课程机构 涉及到机构封面图, 即图片上传media设置, 也需要在xadmin里手动添加几条 ...

  5. 第48课 thinkphp5添加商品库

    目录 思路: 1. html页面里属性下拉框里的值是从goods_attr联attr里的查出来传到模板里的.在属性的下拉栏里展示出来 2. html页面里用二维数组的结构goods_attr[{$k} ...

  6. Thinkphp5 对接百度云对象存储 BOS (上传、删除)

    首先下载SDK包可以在 官网下载,或者在项目根目录使用composer . composer require baidubce/bce-sdk-php 压缩包里面有五个文件,实际运用到只有两个,然后放 ...

  7. 今天 运营同事发现的bug记录 上传商品时商品名称带双引号 导致输出页面时 双引号被转义

    例如  ”sk||““美白”淡化 这样输出表单页面时显示出来的只有sk||  解决办法 把输出文字对双引号进行转义

  8. Ecshop商品描述上传中文名图片无法显示解决方法

    在后台上传商品图片的时候,如果你选择一个中文名称的图片,那么上传后会产生乱码,导致图片显示不出来. 下面说一种解决办法:使用"年月日时分秒 + 6个随机字符"做为文件名,如 201 ...

  9. 潭州课堂25班:Ph201805201 django框架 第十课 GET,POST 请求 文件上传,HttpResponse,cookie (课堂笔记)

    在项目中新建个APP, 在主目录中的配置文件中进行 APP 注册 在主目录中的 urls 文件中进行路径分配 新建 urrls 文件 进行分路由配置 创建模板文件 html 文件 写个 form 表单 ...

随机推荐

  1. Java面向对象_接口应用——策略模式

    概念:定义了一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化. 接口抽象的就是某种方法. OO设计原则:1.面向接口编程  2.封装变化  3.多用 ...

  2. SpringBoot | 第十七章:web应用开发之文件上传

    前言 上一章节,我们讲解了利用模版引擎实现前端页面渲染,从而实现动态网页的功能,同时也提出了兼容jsp项目的解决方案.既然开始讲解web开发了,我们就接着继续往web这个方向继续吧.通常,我们在做we ...

  3. zookeeper的简单搭建,java使用zk的例子和一些坑

    一 整合 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的github项目地址 https://github.com/247292980/spring- ...

  4. iOS开发ReactiveCocoa学习笔记(六)

    RAC操作方法三. demo地址:https://github.com/SummerHH/ReactiveCocoa.git doNext deliverOn timeout interval del ...

  5. Quartz 定时器,同时运用多个定时器

    效果:每天执行两个定时器,两个定时器不相关联.jar版本Quartz 2.2.3 Java工程结构图  jar 包下载: 链接: https://pan.baidu.com/s/1-7dh620k9P ...

  6. 前端seo基础规范

    基本规范 TDK代码规范 A: 关键词,一般3~4个最好,要与当前页面内容相关(根据实际情况,不适宜过多堆积关键词): B: 杜绝不同URL的页面标题重复现象,作为搜索结果摘要的重要选择目标之一,一定 ...

  7. JS 获取 今日、昨日、本周、本月、本季度、本年、上月、上周、上季度、去年

    /** * 日期范围工具类 */ var dateRangeUtil = (function () { /*** * 获得当前时间 */ this.getCurrentDate = function ...

  8. ubuntu 16.04安装nVidia显卡驱动和cuda/cudnn踩坑过程

    安装深度学习框架需要使用cuda/cudnn(GPU)来加速计算,而安装cuda/cudnn,首先需要安装nvidia的显卡驱动. 我在安装的整个过程中碰到了驱动冲突,循环登录两个问题,以至于最后不得 ...

  9. IntelliJ IDEA IDEA 2018 激活注册码

    K03CHKJCFT-eyJsaWNlbnNlSWQiOiJLMDNDSEtKQ0ZUIiwibGljZW5zZWVOYW1lIjoibnNzIDEwMDEiLCJhc3NpZ25lZU5hbWUiO ...

  10. weblogic 忘记控制台账号密码 进行重新设置

    第一步:首先要关闭weblogic服务. 第二步:对一些重要的文件进行备份: 1. 为了保证操作安全,备份%DOMAIN_HOME%/security/DefaultAuthenticatorInit ...