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

目录

  • 手册地址:
  • before_insert(新增之前的操作)
    • 要实现的功能
    • 思路
    • 触发条件:
      • 1. 控制器里必须要调用模型的save()方式保存数据,用insert()触发不了勾子函数的
      • 2. 模型初使化init()里使用 Goods::beforeInsert

手册地址:

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

转载于:https://www.cnblogs.com/haima/p/9829402.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python编程格式化输出_Python的三种格式化输出

今天刚学了python的三种格式化输出,以前没接触过这么有趣的输出方式,现在来分享一下。#!/user/bin/env python#coding:utf-8#三种格式化输出#第一种格式化输出nameinput("name:")ageinput("age:")jobinput("job:")salaryi…

年轻,可以不气盛?

昨天和我一个好友电话,因为到了年末,我们互相说一些自己工作上的情况,本来是在微信聊着。我然后说了句,我想跟自己的领导提下建议,因为感觉在这边工作了一段时间,想把自己对工作上的一些看法和领导分享&…

加深昨天的話題,把一些模糊的概念統一一下 日期:2004-05-19。

加深昨天的話題&#xff0c;把一些模糊的概念統一一下 日期:2004-05-19。 <Code 1>unit dmOrderTimeModule; interface uses SysUtils, Variants, Classes, dmBaseModuleImp, hmStrTools, hmSqlTools, hmDateTools, hmTimeTools; type TdmOrderTime class(TBaseDataMo…

多线程的异常捕捉

为什么要单独讲多线程的异常捕捉呢&#xff1f;先看个例子&#xff1a; public class ThreadException implements Runnable{Overridepublic void run() {throw new RuntimeException();}//现象&#xff1a;控制台打印出异常信息&#xff0c;并运行一段时间后才停止public stat…

Linux 安装配置JDK 、 MySQL 、nginx

今天我来讲一下在Linux下各环境的搭建&#xff0c;主要就讲一下jdk、MySQL、和一个代理服务器nginx 1、 jdk的安装配置 1)卸载自带openjdk 当我们拿到一个全新的ECS的时候上面有的会自带一个openjdk&#xff0c;但是我们一般不会用这个&#xff0c;所以在这里我们会先卸载这个自…

Flex与javascript通信

首先列出代码部分&#xff0c;我们可以先尝试的感受一下效果&#xff1a; 1.Flex代码部分&#xff1a;文件名为Flex_Javascript.mxml <?xml version"1.0" encoding"utf-8"?><s:Application xmlns:fx"http://ns.adobe.com/mxml/2009" …

wat java_并发工具优于wati、notify(69)

现在几乎没有理由在使用wait 和 notify&#xff0c;使用高级工具代替java.util.concurrent 包并发工具分三类&#xff1a;Executor 框架并发集合(concurrent Collection)同步器(synchronizer)并发集合对标准集合接口(List、Map、Queue)封装了高性能的并发实现为了提高并发性&am…

一道关于 fork 的笔试题

题目阅读下面的代码&#xff0c;显示终端会打印出几个 hello world&#xff1f;#include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h>int main() {fork();fork();fork();printf("hello world\n");exit(0); }…

最新招聘公司网站 以及学校的宣讲会

http://campusys.chinahr.com/E/unilever/ 联合利华http://www.mckinsey.com/ 麦肯锡http://www.asap.net.cn/ 信杰 http://guangzhouhonda.51job.com/grad.php 广州本田汽车http://www.hanagroup.com/http://www.augmentum.com/http://www.tetrapak.com.cn/welcome2.htm …

小球游戏1

引用&#xff1a;http://www.oschina.net/code/snippet_12_4121 [图片] pic3.jpg [图片] pic4.jpg [代码] [Java]代码 01public class Player extends AnimatedSprite {02...03Override04 protected void onManagedUpdate(final float pSecondsElapsed) {05 super.…

[Swift实际操作]八、实用进阶-(7)使用通知的方法进行对象间的消息传递

本文将为你演示&#xff0c;如何使用Notification Center进行消息的传递。通知中心是一个调度消息通知的类&#xff0c;采用单例设计模式&#xff0c;实现数据传递&#xff0c;回调等功能。首先打开自定义视图的代码文件(CustomView.swift) 1 import UIKit2 //使当前的自定义类…

java怎么调kettle_通过Java调取Kettle的结果集

Kettle端&#xff1a;Data Grid只是测试数据&#xff0c;目的是把数据传递到记录结果。Java端&#xff1a;package com.womai.util;import org.pentaho.di.core.KettleEnvironment;import org.pentaho.di.core.RowMetaAndData;import org.pentaho.di.trans.Trans;import org.pe…

Tomcat4/5连接池的设置及简单应用示例

标题&#xff1a;Tomcat4/5连接池的设置及简单应用示例关键字&#xff1a;Tomcat 连接池 JDBC驱动 Context 作者&#xff1a;jrq内容&#xff1a;一、Win2k下Tomcat4的连接池的配置1.安装JDK1.4和jakarta-tomcat-4.1.27.exe。 路径分别为 D:/jdk1.4 和 D:/Tomcat 4.1。 安装…

java并发编程实战阅读总结(a)

1、锁(lock)与volatile(1)、隐式锁&#xff0c;java提供了强制原子性的内置锁机制&#xff1a;synchronized块或synchronized方法。操作共享状态的复合操作必须是原子的&#xff0c;以避免竞态条件&#xff0c;比如读-改-写操作和检查再运行操作。复合操作会在完整的运行期占有…

我也确实很向往深圳这种拼搏的精神

今天跟个同学聊天&#xff0c;是关于他的offer选择&#xff0c;他拿了一个不错的外企岗位offer&#xff0c;这个offer的薪资是他现在薪资两倍还多一些&#xff0c;他现在人在外地&#xff0c;年后准备来深圳工作&#xff0c;他在微信说让我给些建议。首先我肯定的是&#xff0c…

VBA语法基础

数据类型 “数据类型”是指如何将数据存储在内存中。 (1)Boolean 表示逻辑数据&#xff0c;可以是True或False中的任一个值。占用2字节的存储空间&#xff0c;取值范围为True或False&#xff0c;缺省值为False。 (2)Byte 只能表示正数。占用1字节的存储空间&#xff0c;取值范围…

clamav Java_ClamAV安装使用及API例子

ClamAV是一款由Sourcefire组织开发的开源杀毒引擎&#xff0c;Sourcefire同时也是Snort入侵检测引擎的所有者。ClamAV提供了一种更为快速灵活的框架用以检测恶意代码和软件产品。可以作为现有的台式机、文件服务器、邮件服务器以及其他需要杀毒扫描软件场景中杀毒扫描软件的补充…

PHP json_encode后的数据有的大括号于中括号

当array是一个从0开始的连续数组时&#xff0c;json_encode出来的结果是一个由[]括起来的字符串。 而当array是不从0开始或者不连续的数组时&#xff0c;json_encode出来的结果是一个由{}括起来的key-value模式的字符串。转载于:https://www.cnblogs.com/xxllzizi/p/9836469.ht…

第一次使用 Blog

不喜欢BBS上不负责任的灌水&#xff0c;希望有一个记载自己日常心态和工作中所用到的有用技术的平台&#xff0c;作为自己以后的一个回顾&#xff0c;也与大家一同分享。很久就想拥有自己的Blog了&#xff0c;但这第一次使用 Blog &#xff0c;还是有点兴奋&#xff0c;Blog这个…

中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux

去年 6 月份&#xff0c;中科院大学教授、中科院计算所研究员包云岗&#xff0c;发布了开源高性能 RISC-V 处理器核心 —— 香山。近日&#xff0c;包云岗在社交平台晒出图片&#xff0c;香山芯片已流片&#xff0c;回片后进行了串口调通&#xff0c;1 月 24 日成功运行了 Linu…