Laravel5.1 Request类,处理ajax请求,返回JSON

230 阅读2分钟

使用ajax处理新增、修改的代码写在制器中,使得控制器代码臃肿,使用request类处理新增、请求的验证,使控制器看上去清爽简洁,以下代码修改为ajax支持的版本,后台使用的按照常规百度搜索即可。

示例代码:已一个新增医生类做示例

<?php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class DoctorPost extends FormRequest
{
public function authorize() // 这个方法可以用来控制访问权限,例如禁止未付费用户评论…
{
return true; // 注意!这里默认是false,记得改成true
}

public function rules() // 这个方法返回验证规则数组,也就是Validator的验证规则
{
    $aRules = [
        'name'       => 'required|max:30',
        'province'   => 'required',
        'city'       => 'required',
        'area'       => 'required',
        'hospital'   => 'required',
        'section'    => 'required',
        'mobile'     => 'required',
    ];
    $aData = request()->input();
    if (isset($aData['code'])) {
        $aRules['code'] = 'required';
    }
    return $aRules;
}

public function messages()
{
    $aMessages = [
        'name.required'      => '请填写您的姓名',
        'province.required'  => '请选择省份信息',
        'city.required'      => '请选择城市信息',
        'area.required'      => '请选择地区信息',
        'hospital.required'  => '请选择医院信息',
        'section.required'   => '请选择科室信息',
        'mobile.required'    => '请输入手机号',
    ];
    $aData = request()->input();
    if (isset($aData['code'])) {
        $aMessages['code.required'] = '请输入验证码';
    }
    return $aMessages;
}

/**
 *验证权限失败时的相应
 */

public function forbiddenResponse()
{
    if ($this->ajax()) {
        return response()->json(['msg' => '没有权限''success' => false]);
    } else {
        return abort(403);
    }
}

/**
 * 验证参数失败时的响应,如果验证指定的规则未通过,response将被调用,因为errors是个数组,保存所有的验证出错信息,这儿我们取出第一条显示,比较符合我们的使用习惯
 * @param array $errors
 * @return \Illuminate\Http\JsonResponse
 */

public function response(array $errors)
{
    if ($this->ajax()) {
        $firstErrors = array_shift($errors);
        $error = $firstErrors[0];
        return response()->json(['msg' => $error, 'success' => false]);
    } else {
        return abort(404);
    }
}

}

控制器中调用,新增修改,依赖注入即可,示例修改

public function updateDoc(DoctorPost request, DoctoroDoctor, id){aData = request->all();//接收到所有的数据    
    Doctor::where('id',id)->update($aData);
return json_encode(['success' => true]); }