欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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