ThinkPHP 模型事件 before_insert / before_delete 修改

浏览:5688 发布日期:2017/10/11 分类:ThinkPHP5专区 关键字: thinkphp5 模型
thinkphp5的模型 对于 3.2.3 是不一样的User::event('before_insert', function ($user) {
            if ($user->status != 1) {
                return false;
            }
        });
是不是感觉不方便,同样模型之间也不好做继承。

现在进行修改:
首先创建一个App模型,然后其他模型都继承App
App中: protected static function init()
    {
        ##新增前回调 这里的$model就是$this
        self::beforeInsert(function ($model) {
            if (method_exists($model, 'before_insert')) {
                return $model->before_insert();
            }
        });
        ##新增后回调
        self::afterInsert(function ($model) {
            if (method_exists($model, 'after_insert')) {
                return $model->after_insert();
            }
        });
        ## ... 其他事件一样
        ##删除后回调
        self::afterDelete(function ($model) {
            if (method_exists($model, 'after_delete')) {
                return $model->after_delete();
            }
        });
    }
这样我们就可以按下面的方式定义方法去做我们的模型事件了,而且支持继承,使用起来是比较熟悉的类方法;里面用$this->data来获取当前数据,如果是before...中return false来阻止数据库操作。    public function before_insert()
    {
    }

    public function after_insert()
    {
    }

    public function before_update()
    {
    }
    //其他事件
如果有更好的使用方法请回复下,这也是考虑了一阵才这样修改的,暂时没有想到更好的办法。

最后,还有较多的修改和便捷操作已经在开源系统eduaskcms中使用,欢迎下载体会。

EduaskCMS是基于ThinkPHP5.0.11框架开发的一个免费开源的内容管理系统,开发的理念不光注重后台,同样注重后台功能的扩展;更加注重的是前台的快速开发和便捷。系统希望实现的目标是“让你的代码,能省则省”。

系统网站:http://www.eduaskcms.xin
后台测试:http://www.eduaskcms.xin/run
用户名:test123
密 码:test123

建站手册:https://www.kancloud.cn/laowu199/e_use/

开发手册:https://www.kancloud.cn/laowu199/e_dev

码云下载:https://gitee.com/eduaskcms/eduaskcms







最佳答案
评论( 相关
后面还有条评论,点击查看>>