在做开发中经常会遇到一个功能的增删改查,如果每个方法都写一个方法,就会发现其中有很多重复代码,其中最多重复代码的就是“增改”了,在一次重构代码的时候我就在想能不能把这两个方法合并成一个呢,有了这种想法我马上就对这个想法付出实践;
当时的想法是这样的能不能就用一个变量来判断这次操作是不是增加或者修改;
顺着这思路下去我先定义了一个变量赋值为“add”,然后通过传输的id去查找是否有这条数据,如果有这个变量就修改成“updata”;
$type = 'add';
$content = M('demo')->fieid('title,text')->where('id = '.$data['id'])->find();
if(is_array($content))
{
$type = 'updata';
}
然后就把这个变量放到模板中,加一个隐藏字段来存
$this->assign('type', $type);
<input type="hidden" name="type" value="{$type}">
然后就拿这个字段来判断是否添加或修改,具体代码如下:
php:
public function content()
{
//获取从任何方式传输过来的id
$data['id'] = I('request.id');
//判断是不是post提交的数据,如果不是就显示页面
if(!IS_POST)
{
//判断页面是添加还是修改
$type = 'add';
//id必须存在,我这边就简单验证下,以实际为准
if($data['id'] == "" || preg_match('/\D/', $data['id']))
{
echo json_decode(['error', '非法操作!']);
exit;
}
$content = M('demo')->fieid('title,text')->where('id = '.$data['id'])->find();
if(is_array($content))
{
$type = 'updata';
}
$this->assign('content', $content);
$this->assign('type', $type);
$this->assign('id', $data['id']);
$this->display();
exit;//这里必须要停止运行,要不然就会有问题
}
$type = I('post.type');
$data['title'] = I('post.title');
$data['text'] = I('post.text');
//判断是否是我们内设的内容
if(!in_array($type, ['add','updata']))
{
echo json_decode(['error', '非法操作!']);
exit;
}
//如果是添加操作
if($type == 'add')
{
$data['addtime'] = time();
if(M('demo')->add($data))
{
echo json_decode(['success', '添加成功!']);
exit;
}
echo json_decode(['error', '添加失败!']);
exit;
}
if(M('demo')->save($data))
{
echo json_decode(['success', '添加成功!']);
exit;
}
echo json_decode(['error', '添加失败!']);
exit;
}
html:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="__PUBLIC__/js/jquery-1.11.0.min.js"></script>
</head>
<body>
<form>
<input type="hidden" name="id" value="{$id}">
<input type="hidden" name="type" value="{$type}">
<input type="text" name="title" value="{$content['title']}">
<textarea name="text">{$content['text']}</textarea>
<input type="button" class="send" name="send" value="保存">
</form>
<script type="text/javascript">
$('.send').on('click',function(){
$.ajax({
url:'/content/content',
type:"post",
dataType:"json",
data:$("form").serialize(),
timeout:30000,
success:function(result){
alert(result[1]);
}
});
})
</script>
</body>
</html>