getProperty('only'); $property->setAccessible(true); $fields = $property->getValue($validator); return is_array($fields) ? $fields : []; } $addPayload = [ 'patient_name' => '张三', 'phone' => '13812345678', 'gender' => 1, 'age' => 42, 'diagnosis_type' => '复诊', 'local_hospital_name' => '某医院', 'status' => 1, 'create_source' => 'admin', ]; $addOnly = sceneOnlyFields((new DiagnosisValidate())->sceneAdd()); foreach (['task', 'prompt', 'model', 'report_id', 'content', 'diagnosis_id', 'tracking_content', 'id'] as $leaked) { diagnosisSceneExpect( !in_array($leaked, $addOnly, true), "新增诊单场景不得校验 {$leaked}" ); } foreach (['patient_name', 'phone', 'gender', 'age', 'diagnosis_type', 'local_hospital_name'] as $required) { diagnosisSceneExpect( in_array($required, $addOnly, true), "新增诊单场景仍应校验 {$required}" ); } $addScene = (new DiagnosisValidate())->scene('add'); $addOk = $addScene->check($addPayload) === true; $addError = $addOk ? '' : json_encode($addScene->getError(), JSON_UNESCAPED_UNICODE); diagnosisSceneExpect($addOk, '新增诊单不带 task 应通过校验' . ($addError !== '' ? ": {$addError}" : '')); $editScene = (new DiagnosisValidate())->sceneEdit(); diagnosisSceneExpect( !in_array('task', sceneOnlyFields($editScene), true), '编辑诊单场景不得校验 AI 助手任务' ); $assistantScene = (new DiagnosisValidate())->sceneAiAssistant(); diagnosisSceneExpect( in_array('task', sceneOnlyFields($assistantScene), true), 'AI 助手场景仍应校验 task' ); echo "DiagnosisValidateSceneTest passed\n";