| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | <?phpnamespace app\api\validate;use think\Validate;/** * 身体档案验证器 */class BodyProfile extends Validate{    // 验证规则    protected $rule = [        'profile_name' => 'require|length:1,100',        'gender' => 'require|in:1,2',        'age' => 'require|integer|between:1,120',        'height' => 'require|float|between:50,250',        'weight' => 'require|float|between:10,300',        'is_own' => 'in:0,1',        'relation' => 'length:0,50',        'profile_photo' => 'url',        'body_photos' => 'array|checkBodyPhotos',    ];    // 验证消息    protected $message = [        'profile_name.require' => '档案名称不能为空',        'profile_name.length' => '档案名称长度不能超过100个字符',        'gender.require' => '请选择性别',        'gender.in' => '性别参数错误',        'age.require' => '年龄不能为空',        'age.integer' => '年龄必须是整数',        'age.between' => '年龄必须在1-120岁之间',        'height.require' => '身高不能为空',        'height.float' => '身高必须是数字',        'height.between' => '身高必须在50-250厘米之间',        'weight.require' => '体重不能为空',        'weight.float' => '体重必须是数字',        'weight.between' => '体重必须在10-300公斤之间',        'is_own.in' => '档案类型参数错误',        'relation.length' => '关系描述不能超过50个字符',        'profile_photo.url' => '档案照片必须是有效的URL',        'body_photos.array' => '身体照片必须是数组格式',        'body_photos.checkBodyPhotos' => '身体照片格式错误,必须包含front、side、back三个角度的照片',    ];    // 验证场景    protected $scene = [        'create' => ['profile_name', 'gender', 'age', 'height', 'weight', 'is_own', 'relation', 'profile_photo', 'body_photos'],        'update' => ['profile_name', 'age', 'height', 'weight', 'relation', 'profile_photo', 'body_photos'],    ];    /**     * 验证身体照片格式     * @param mixed $value     * @param string $rule     * @param array $data     * @return bool     */    protected function checkBodyPhotos($value, $rule, $data)    {        if (!is_array($value)) {            return false;        }        // 必须包含的照片角度        $requiredAngles = ['front', 'side', 'back'];                foreach ($requiredAngles as $angle) {            if (!isset($value[$angle]) || empty($value[$angle])) {                return false;            }                        // 验证URL格式            if (!filter_var($value[$angle], FILTER_VALIDATE_URL)) {                return false;            }        }        return true;    }}
 |