美文网首页
TP5 Model层拦截过滤

TP5 Model层拦截过滤

作者: 鹅鹅鹅的天歌 | 来源:发表于2018-07-26 16:46 被阅读0次

    最近由于人员变动,接手了一个TP5的项目,有个需求是对入库的某些字段进行脱敏处理。比如身份证、银行卡等等

    简单翻阅了下源码,发现所有的写入请求都是走的model层的save方法。于是准备重写save方法。但是看到save方法的实现发现里面有trigger语句。发现TP5和大多数框架一样,已经实现了切面。

    查阅官方文档,model层可用的切面如下

    before_insert 新增前
    after_insert 新增后
    before_update 更新前
    after_update 更新后
    before_write 写入前(新增和更新都会调用)
    after_write 写入后(新增和更新都会调用)
    before_delete 删除前
    after_delete 删除后
    注册的回调方法支持传入一个参数,当前示例模型对象,并且before_write,before_insert,before_update,before_delete返回false会结束执行。
    

    很明显before_write符合我们自己的需求。实现如下

    protected static function init()
        {
            //数据脱敏
            OrderInfo::event('before_write',function($model){
                if(!empty($model->IdCard) && !strpos($model->IdCard, '**'))
                {
                    $len = strlen($model->IdCard) - 4;
                    $len < 4 && $len = 4;
                    $model->IdCard = substr($model->IdCard, 0, $len) . '****';
                }
                if(!empty($model->BankCardId) && !strpos($model->BankCardId, '**'))
                {
                    $len = strlen($model->BankCardId) - 4;
                    $len < 4 && $len = 4;
                    $model->BankCardId = substr($model->BankCardId, 0, $len) . '****';
                }
                return true;
            }
        }
    

    相关文章

      网友评论

          本文标题:TP5 Model层拦截过滤

          本文链接:https://www.haomeiwen.com/subject/ixwbmftx.html