Tp5;模型事件是指在进行模型的写入操作的时候触发的操作行为,包括模型的save方法和delete方法。模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的模型类支持before_delete、after_delet
Tp5 模型事件是指在进行模型的写入操作的时候触发的操作行为,包括模型的save方法和delete方法。
模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的
模型类支持before_delete、after_delete、before_write、after_write、before_update、after_update、before_insert、after_insert事件行为。
快捷注册(V5.0.4+)
V5.0.4+版本开始,系统提供了内置的事件注册的快捷方法,你可以用下面的方式替代
beforeInsert新增前
afterInsert新增后
beforeUpdate更新前
afterUpdate更新后
beforeWrite写入前
afterWrite写入后
beforeDelete删除前
afterDelete删除后
官方demo:
namespace app\index\model;
use think\Model;
class User extends Model
{
protected static function init()
{
User::beforeInsert(function ($user) {
if ($user->status != 1) {
return false;
}
});
}
}
以下是处理商品模板使用方法说明:
model 模型代码:
<?php
namespace app\admin\model;
use think\Model;
class Goods extends Model
{
protected $field=true;
protected static function init()
{
Goods::beforeInsert(function ($goods) {
// 新增前,生成商品主图的缩略图
if($_FILES['og_thumb']['tmp_name']){
$thumbName=$goods->upload('og_thumb');
}
});
Goods::afterInsert(function($goods){
// 新增后,批量写入会员价格
$mpriceArr=$goods->mp;
$goodsId=$goods->id;
db('member_price')->insert(['mlevel_id'=>$k,'mprice'=>$v,'goods_id'=>$goodsId]);
// 处理商品相册
if($goods->_hasImgs($_FILES['goods_photo']['tmp_name'])){
$files = request()->file('goods_photo');
foreach($files as $file){
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/goods');
if($info){
$photoName= $info->getFilename();
$ogphoto=date('Ymd').DS.$photoName;
$bigphoto=date('Ymd').DS.'big_'.$photoName;
$midphoto=date('Ymd').DS.'mid_'.$photoName;
$smphoto=date('Ymd').DS.'sm_'.$photoName;
$image = \think\Image::open(IMG_UPLAODS.'goods/'.$ogphoto);
$image->thumb(500, 500)->save(IMG_UPLAODS.'goods/'.$bigphoto);
$image->thumb(200, 200)->save(IMG_UPLAODS.'goods/'.$midphoto);
$image->thumb(70, 70)->save(IMG_UPLAODS.'goods/'.$smphoto);
db('goods_photo')->insert(['goods_id'=>$goodsId,'big_photo'=>'goods/'.$bigphoto,'mid_photo'=>'goods/'.$midphoto,'sm_photo'=>'goods/'.$smphoto,'og_photo'=>'goods/'.$ogphoto]);
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
});
Goods::beforeDelete(function ($goods) {
$goodsId=$goods->id;
// 删除前,删除关联的商品属性
db('goods_attr')->where('goods_id','=',$goodsId)->delete();
});
}
public function upload($imageName){
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file($imageName);
// 移动到框架应用根目录/public/uploads/ 目录下
if($file){
$info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/goods');
if($info){
// // 成功上传后 获取上传信息
// // 输出 jpg
// echo $info->getExtension();
// // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
// echo $info->getSaveName();
// // 输出 42a79759f284b767dfcb2a0197904287.jpg
return $info->getFilename();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
}
controller 控制器代码:
<?php
namespace app\admin\controller;
use think\Controller;
class Goods extends controller
{
public function add()
{
if(request()->isPost()){
$data=input('post.');
$add=model('goods')->save($data);
if($add){
$this->success('操作成功!','lst');
}else{
$this->error('操作失败!');
}
return;
}
return view();
}
public function del($id)
{
$del=model('goods')->destroy($id);
if($del){
$this->success('操作成功!','lst');
}else{
$this->error('操作失败!');
}
}
}
本文标题为:Tp5 模型事件的使用
- Laravel balde模板文件中判断数据为空方法 2023-08-30
- PHP简单实现二维数组的矩阵转置操作示例 2022-10-02
- windows下9款一键快速搭建PHP本地运行环境的好工具(含php7.0环境) 2023-09-02
- PHP实现微信支付(jsapi支付)流程步骤详解 2022-10-09
- laravel通用化的CURD的实现 2023-03-17
- PHP中PDO事务处理操作示例 2022-10-15
- 用nohup命令实现PHP的多进程 2023-09-02
- PHP仿tp实现mvc框架基本设计思路与实现方法分析 2022-10-18
- laravel实现按月或天或小时统计mysql数据的方法 2023-02-22
- php微信公众号开发之秒杀 2022-11-23