<?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的触发器,在新增,编辑,和删除时,自动同步一条记录到历史表,实现了这个需求