ThinkPHP 5.1 封装控制器处理数据editData方法
程序员文章站
2022-07-08 10:46:50
...
整体思路是前端页面只通过Ajax向后台控制器的editData方法进行数据的增加、删除和修改的操作——也就是说在每个控制器中都有一个editData方法;考虑到代码重用,99%代码一样,只有创建的两个对象名称不同,因此用update_modal_data($param)函数统一处理模态窗体的增删改!
/**
* 统一处理模态窗体的增删改数据
* @Author Yeyu2001
* @DateTime 2019-04-13T00:28:29+0800
* @param 数组 $param 模态窗体表单传递过来的序列化数据
* @return json 将处理数据的结果返回
*/
function update_modal_data($param) {
// 待返回的数组
$data = array();
$Type = ['NEW' => '创建', 'EDIT' => '更新', 'DEL' => '删除'];
// 获取参数
$flag = strtoupper($param['__type__']);
$obj = $param['__mark__'];
// 动态变量拼接创建对象
$model_string = '\app\admin\model\\' . $obj;
$validate_string = '\app\admin\validate\\' . $obj;
// 创建对象
$model = new $model_string; // 创建模型对象
$validate = new $validate_string; // 创建验证对象
// 校验用户数据
$check = $validate->check($param);
// 校验数据后根据类别处理数据
if (!$check) {$data['msg'] = $validate->getError();} else {
// 按照类别进行不同处理
switch ($flag) {
case 'NEW':
$info = $model->allowField(true)->save($param);
break;
case 'EDIT':
$info = $model->allowField(true)->save($param, ['id' => $param['id']]);
break;
case 'DEL':
$info = $model->where('id', $param['id'])->update(['status' => 0]);
break;
}
// 设定返回结果字符串
if ($info) {$data['msg'] = $Type[$flag] . "成功";} else { $data['msg'] = $Type[$flag] . "失败";}
}
// 返回字符串
return json($data);
}
在每个控制器的editData方法中只需要调用一条语句就可以完成增删改处理:
// 统一处理增删改数据
public function editData() {
// 返回处理结果
return update_modal_data(request()->param());
}
转载于:https://www.jianshu.com/p/9ec46212ce8b