'required|exists:studies,id', 'title' => 'required|string|max:500', 'type' => 'required|in:1,2', 'answer' => 'required|array|min:2', 'answer.*.content' => 'required|string|max:200', 'answer.*.result' => 'required|in:0,1', ]; } /** * Get custom messages for validator errors. */ public function messages(): array { return [ 'study_id.required' => __('validation.required', ['attribute' => __('study_ask.study_id')]), 'study_id.exists' => __('validation.exists', ['attribute' => __('study_ask.study_id')]), 'title.required' => __('validation.required', ['attribute' => __('study_ask.title')]), 'title.max' => __('validation.max.string', ['attribute' => __('study_ask.title'), 'max' => 500]), 'type.required' => __('validation.required', ['attribute' => __('study_ask.type')]), 'type.in' => __('validation.in', ['attribute' => __('study_ask.type')]), 'answer.required' => __('validation.required', ['attribute' => __('study_ask.answer')]), 'answer.array' => __('validation.array', ['attribute' => __('study_ask.answer')]), 'answer.min' => __('validation.min.array', ['attribute' => __('study_ask.answer'), 'min' => 2]), 'answer.*.content.required' => __('validation.required', ['attribute' => __('study_ask.answer_content')]), 'answer.*.content.max' => __('validation.max.string', ['attribute' => __('study_ask.answer_content'), 'max' => 200]), 'answer.*.result.required' => __('validation.required', ['attribute' => __('study_ask.answer_result')]), 'answer.*.result.in' => __('validation.in', ['attribute' => __('study_ask.answer_result')]), ]; } /** * Configure the validator instance. */ public function withValidator($validator): void { $validator->after(function ($validator) { // 检查学习内容是否存在 if ($this->has('study_id')) { $study = Study::find($this->input('study_id')); if (!$study) { $validator->errors()->add('study_id', __('study.not_found')); } } // 检查答案选项 if ($this->has('answer')) { $answers = $this->input('answer'); $correctCount = 0; foreach ($answers as $index => $answer) { if (isset($answer['result']) && $answer['result'] == 1) { $correctCount++; } } // 检查是否有正确答案 if ($correctCount == 0) { $validator->errors()->add('answer', __('study_ask.no_correct_answer')); } // 检查单选题是否只有一个正确答案 if ($this->input('type') == StudyAsk::TYPE_SINGLE && $correctCount > 1) { $validator->errors()->add('answer', __('study_ask.single_choice_multiple_correct')); } // 检查多选题是否至少有一个正确答案 if ($this->input('type') == StudyAsk::TYPE_MULTIPLE && $correctCount < 1) { $validator->errors()->add('answer', __('study_ask.multiple_choice_no_correct')); } } }); } }