TP5 Model層攔截過濾

最近由于人員變動,接手了一個TP5的項目,有個需求是對入庫的某些字段進行脫敏處理。比如身份證、銀行卡等等

簡單翻閱了下源碼,發(fā)現(xiàn)所有的寫入請求都是走的model層的save方法。于是準備重寫save方法。但是看到save方法的實現(xiàn)發(fā)現(xiàn)里面有trigger語句。發(fā)現(xiàn)TP5和大多數(shù)框架一樣,已經(jīng)實現(xiàn)了切面。

查閱官方文檔,model層可用的切面如下

before_insert 新增前
after_insert 新增后
before_update 更新前
after_update 更新后
before_write 寫入前(新增和更新都會調(diào)用)
after_write 寫入后(新增和更新都會調(diào)用)
before_delete 刪除前
after_delete 刪除后
注冊的回調(diào)方法支持傳入一個參數(shù),當前示例模型對象,并且before_write,before_insert,before_update,before_delete返回false會結束執(zhí)行。

很明顯before_write符合我們自己的需求。實現(xiàn)如下

protected static function init()
    {
        //數(shù)據(jù)脫敏
        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;
        }
    }
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容