zoukankan      html  css  js  c++  java
  • 模型事件

    模型事件

    版本新增功能
    5.0.4 增加模型事件注册快捷方法

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

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

    模型类支持before_deleteafter_deletebefore_writeafter_writebefore_updateafter_updatebefore_insertafter_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) {
                    returnfalse;
                }
            });

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

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

            User::event('before_insert', function($user){
                if ($user->status != 1) {
                    returnfalse;
                }
            });
            // 注册回调到beforeInsert函数
            User::event('before_insert', 'beforeInsert');

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

    namespaceappindexmodel;
    
    usethinkModel;
    
    classUserextendsModel
    {
        protectedstaticfunctioninit()
    {
            User::event('before_insert', function($user){
                if ($user->status != 1) {
                    returnfalse;
                }
            });
        }
    }

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

    快捷注册(V5.0.4+

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

    namespaceappindexmodel;
    
    usethinkModel;
    
    classUserextendsModel
    {
        protectedstaticfunctioninit()
    {
            User::beforeInsert(function($user){
                if ($user->status != 1) {
                    returnfalse;
                }
            });
        }
    }

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

    标签位描述
    beforeInsert 新增前
    afterInsert 新增后
    beforeUpdate 更新前
    afterUpdate 更新后
    beforeWrite 写入前
    afterWrite 写入后
    beforeDelete 删除前
    afterDelete 删除后
  • 相关阅读:
    C# winForm webBrowser页面中js调用winForm类方法(转)
    Shader开发工具: PVRShaman
    创建压缩纹理的工具
    Andriod NDK编译的时候无法使用math.h的函数。
    mongodb自动关闭:页面文件太小,无法完成操作
    通读cheerio API
    How to skip to next iteration in jQuery.each() util?
    在javascript中substr和substring的区别是什么
    运行代码时报linker command failed with exit code 1 错误
    软件开发模式对比(瀑布、迭代、螺旋、敏捷)
  • 原文地址:https://www.cnblogs.com/q1104460935/p/6916233.html
Copyright © 2011-2022 走看看