Tp5 模型事件的使用

2019-08-09   阅读:1338   分类:后端    标签: TP5

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('操作失败!');
		}
    }


}


【腾讯云】11.11 云上盛惠,云产品限时抢购,1核2G云服务器首年88元

‘简忆博客’微信公众号 扫码关注‘简忆博客’微信公众号,获取最新文章动态
转载:请说明文章出处“来源简忆博客”。http://www.tpxhm.com/adetail/169.html

×
觉得文章有用就打赏一下文章作者
微信扫一扫打赏 微信扫一扫打赏
支付宝扫一扫打赏 支付宝扫一扫打赏

文章评论(0)

登录
头像

简忆博客
仕而优则学,学而优则仕。

置顶推荐

打赏本站

如果你觉得本站很棒,可以通过扫码支付打赏哦!
微信扫码:你说多少就多少~
微信扫码
支付宝扫码:你说多少就多少~
支付宝扫码
×