thinkphp3.2.3存json字符串

<?php

class KeyValueController extends CommonController
{
    public function history(){
        $model = M('KeyValueHistory');
        $map = ['k' => $_REQUEST['k']];
        $history = $model->where($map)->order('update_time DESC')->select();
        $this->assign('history', $history);
        $this->display();
    }

    public function isJson($string) {
        json_decode($string);
        return (json_last_error() == JSON_ERROR_NONE);
    }

    public function insert($dwz_db_name = '') {
        $dwz_db_name = $dwz_db_name ? $dwz_db_name :CONTROLLER_NAME;
        $model = CM($dwz_db_name);
        if (false === $model->create()) {
            $this->error($model->getError());
        }
        $k = $_POST['k'];
        $v = $_POST['v'];
        if($this->isJson($v)){
            $v = htmlspecialchars_decode($v);
            $v = json_decode($v);
            $v = json_encode($v);
            $model->v = $v;
        }
        
        // var_dump($model->v);
        
        // var_dump($_POST);
        //保存当前数据对象
        $list = $model->add();
        $insertId = $model->getLastInsID();
        if ($list !== false) { //保存成功
            $data = $model->find($insertId);
            $this->redis_obj->hset('key_value',$k,$v);
            $this->success('新增成功!', cookie('_currentUrl_'));
        } else {
            //失败提示
            $this->error('新增失败!');
        }
    }

    public function edit($dwz_db_name = '') {
        $dwz_db_name = $dwz_db_name ? $dwz_db_name :CONTROLLER_NAME;
        $model = M($dwz_db_name);
        $pk = $model->getPk();
        $id = $_REQUEST[$pk];
        $vo = $model->where([$pk=>$id])->find();
        if($this->isJson($vo['v'])){
            $vo['v'] = json_decode($vo['v']);
            $vo['v'] = json_encode($vo['v'], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
        }
        // var_dump($vo['v']);
        $this->assign('vo', $vo);
        $this->display();
    }

    public function update($dwz_db_name = '') {
        $dwz_db_name = $dwz_db_name ? $dwz_db_name :CONTROLLER_NAME;
        $model = CM($dwz_db_name);
	    if(false === $model->create()) {
            $this->error($model->getError());
        }
        $k = $_POST['k'];
        $v = $_POST['v'];
        if($this->isJson($v)){
            $v = htmlspecialchars_decode($v);
            $v = json_decode($v);
            $v = json_encode($v);
            $model->v = $v;
        }
       
        // 更新数据
	    $list = $model->save();
        
        if (false !== $list) {
            $this->redis_obj->hset('key_value',$k,$v);
            //成功提示
            $this->success('编辑成功!', cookie('_currentUrl_'));
        } else {
            //错误提示
            $this->error('编辑失败!');
        }
    }

    public function delete($dwz_db_name = '') {
        $dwz_db_name = $dwz_db_name ? $dwz_db_name :CONTROLLER_NAME;
        //删除指定记录         
        $model = M($dwz_db_name);
        if (!empty($model)) {
            $pk = $model->getPk();
            $id = $_REQUEST[$pk];
            if (isset($id)) {
                $condition = array($pk => array('in', explode(',', $id)));
                $data = $model->find($id);
                $list = $model->where($condition)->delete();
                if ($list !== false) {
                    $this->redis_obj->hdel('key_value',$data['k'],$data['v']);
                    $this->success('删除成功!');
                } else {
                    $this->error('删除失败!');
                }
            } else {
                $this->error('非法操作');
            }
        }
    }
}

需求:

在后台新增1个页面,能展示,编辑,和新增key,value 字段,能展示key对应的value修改历史,并且把最新的一条,同步到redis.

value 有可能是字符串,有可能是json

上面的代码,是控制这个页面的controller

同时配合myslq的触发器,在新增,编辑,和删除时,自动同步一条记录到历史表,实现了这个需求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值