- 比如说前台传递过来一个json数组,里面每一个条目都是一条数据,在这种情况下改如何处理呢?
<?php
namespace App\Http\Requests;
use App\User;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class StoreEvaluateStudentCourseRecordPost extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// 保存评价记录验证
'*.type' => 'required',
'*.class_id' => 'required|integer',
'*.course_id' => 'required|integer',
'*.student_id' => 'required|integer',
'*.quota_id' => 'required|integer',
'*.evaluate_data' => 'required|max:191',
];
}
/**
* 配置验证器实例。
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
/**
* 目前只有一个评价记录模板,每提交一种类型的评价需要新建一张表存储,由于评价类型传递字段的不可控性,我采取每一种评价类型建一张表的方式
* 验证:
* student_course 老师对学生课程指标评价 对应的是evaluate_student_course_records 表
*/
$validator->after(function ($validator) {
$infos = $validator->getData();
if(!empty($infos) && isset($infos[0]) && is_array($infos[0])){ // 多维数组上传
foreach ($infos as $info){
if(!empty($info['type']) && $info['type'] == 'student_course' && !empty($info['class_id']) && !empty($info['course_id']) && !empty($info['student_id'])
&& !empty($info['quota_id']) && !empty($info['evaluate_data'])
){
if(User::hasQuota(Auth::id(), $info['class_id'], $info['course_id'], $info['quota_id'])){
return true;
}
}
}
}
$this->failedValidation($validator); // 让校验失败
});
}
// public function validator(ValidationFactory $factory)
// {
// $data = $this->validationData();
// if(!empty($data) && is_array($data)){
// foreach ($data as $d ){
// $instance = $factory->make(
// $d, $this->container->call([$this, 'rules']),
// $this->messages(), $this->attributes()
// );
// if (method_exists($this, 'withValidator')) {
// $this->withValidator($instance);
// }
// $instance->validate();
// }
// }
// }
}