tp3 php钩子函数,thinkphp模型事件(钩子函数:模型中在增删改等操作前后自动执行的事件)...

thinkphp模型事件(钩子函数:模型中在增删改等操作前后自动执行的事件)

一、总结

1、通过模型事件(钩子函数),可以在插入更新删除等前后执行一些特定的功能

2、模型事件是写在模型里面的,控制器中也必须用了模型操作数据库才能触发模型事件

3、模型事件是需要注册的,注册了才能使用,可用init统一注册

4、支持传入一个参数,(当前的模型对象实例),也就是你传到模型中的数据,也就是你传到数据库中的数据

实例:图片上传

模型:

namespace app\admin\model;

use think\Model;

class Article extends Model

{

protected static function init() //用来统一注册,里面的事件注册了才能用 {

Article::event('before_insert', function ($datain) { //支持传入一个参数,(当前的模型对象实例),也就是你传到模型中的数据 if($_FILES['athumb']['tmp_name']){

// 获取表单上传文件 例如上传了001.jpg

$file = request()->file('athumb');

// 移动到框架应用根目录/public/uploads/ 目录下

$info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/admin');

// 已经上传成功,我们要把文件的路径写进数据库

$datain['athumb']='/static/uploads/admin/'.$info->getSaveName();

}

});

}

}

控制器:

namespace app\admin\controller;

use think\Controller;

use app\admin\model\Article as ModelArticle;

use app\admin\model\Cate as ModelCate;

use app\admin\controller\Base;

class Article extends Base

{

public function add(){

if(request()->isPost()){

$datain=input('post.');

$datain['time']=time();

$modelArticle=new ModelArticle();

//2、获取传入的文件数据

/*在模型的事件中处理了*/

if($modelArticle->save($datain)){ //用了模型,传入的参数就是$datain$this->success('添加文章成功!!','article/lst');

}else{

$this->error('添加文章失败!!');

}

// dump($datain);die;

return;

}

//将栏目信息显示回增加界面

//catetree方法新增了栏目的level字段

$modelCate=new ModelCate();

$data=$modelCate->catetree();

$this->assign('data',$data);

return view();

}

}

二、thinkphp模型事件(钩子函数)

模型事件

版本

新增功能

5.0.4

增加模型事件注册快捷方法

模型事件是指在进行模型的写入操作的时候触发的操作行为,包括模型的save方法和delete方法。

模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的

模型类支持before_delete、after_delete、before_write、after_write、before_update、after_update、before_insert、after_insert事件行为

标签位

描述

before_insert

新增前

after_insert

新增后

before_update

更新前

after_update

更新后

before_write

写入前

after_write

写入后

before_delete

删除前

after_delete

删除后

使用方法如下:

User::event('before_insert', function ($user) {

if ($user->status != 1) {

return false;

}

});

注册的回调方法支持传入一个参数(当前的模型对象实例),并且before_write、before_insert、 before_update、before_delete事件方法如果返回false,则不会继续执行。

支持给一个位置注册多个回调方法,例如:

User::event('before_insert', function ($user) {

if ($user->status != 1) {

return false;

}

});

// 注册回调到beforeInsert函数

User::event('before_insert', 'beforeInsert');

可以在模型类的init方法里面统一注册模型事件,例如:

namespace app\index\model;

use think\Model;

class User extends Model

{

protected static function init()

{

User::event('before_insert', function ($user) {

if ($user->status != 1) {

return false;

}

});

}

}

调用当前模型也可以写入 self::event('before_insert', ...)

快捷注册(V5.0.4+)

V5.0.4+版本开始,系统提供了内置的事件注册的快捷方法,你可以用下面的方式替代

namespace app\index\model;

use think\Model;

class User extends Model

{

protectedstaticfunctioninit()

{

User::beforeInsert(function ($user) {

if ($user->status != 1) {

return false;

}

});

}

}

这些模型类的快捷方法如下:

标签位

描述

beforeInsert

新增前

afterInsert

新增后

beforeUpdate

更新前

afterUpdate

更新后

beforeWrite

写入前

afterWrite

写入后

beforeDelete

删除前

afterDelete

删除后

CI(CodeIgniter)框架中的增删改查操作

我们创建一个模型( 项目目录/models/),请注意:模型名与文件名相同且必须继承数据核心类CI_Model,同时重载父类中的构造方法 CodeIgniter的数据函数类在 \models\User ...

mybatis中的增删改查操作

在这一个部分,主要进行增删改查的示例书写. 增删改查可以基于xml的,也可以基于注解的方式. 一:对单条数据的查询 1.目录结构 这个使得目录更加清晰 2.User.java 这个使用以前的user表 ...

48.Python中ORM模型实现mysql数据库基本的增删改查操作

首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...

后盾网lavarel视频项目---lavarel使用模型进行增删改查操作

后盾网lavarel视频项目---lavarel使用模型进行增删改查操作 一.总结 一句话总结: 使用模型操作常用方法 查一条:$model=Tag::find($id); 删一条:Tag::dest ...

python的Web框架,Django的ORM,模型基础,MySQL连接配置及增删改查

Django中的ORM简介 ORM概念:对象关系映射(Object Relational Mapping,简称ORM): 用面向对象的方式描述数据库,去操作数据库,甚至可以达到不用编写SQL语句就能够 ...

Django——6 模型基础ORM 数据库连接配置 模型的创建与映射 数据的增删改查

Django Django的ORM简介 数据库连接配置 模型的创建与映射 数据库的增删改查 增数据 查数据及补充 改数据 删数据   Django的ORM系统分析 ORM概念:对象关系映射(Objec ...

PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码

PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty) dbconn.php <?php //------------------------使用PDO方式连接数据库文件- ...

jQuery在HTML文档加载完毕后自动执行某个事件;

原来οnchange=“fucntionname(parms)”:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值