serializeToJsonString(), true); // 映射protobuf字段名到验证类字段名 $mappedData = []; if (isset($data['userId'])) { $mappedData['user_id'] = $data['userId']; } if (isset($data['petId'])) { $mappedData['pet_id'] = $data['petId']; } if (isset($data['plantId'])) { $mappedData['plant_id'] = $data['plantId']; } // 注入当前用户ID $mappedData['current_user_id'] = \App\Module\AppGame\SessionApp::getUserId(); return new static($mappedData, [], [], $scene); } /** * 验证规则 * * @param array $rules 自定义规则 * @return array */ public function rules($rules = []): array { return [ [ 'user_id,pet_id,plant_id,current_user_id', 'required' ], [ 'user_id,pet_id,plant_id', 'integer', 'min' => 1, 'msg' => '{attr}必须是大于0的整数' ], // 验证宠物归属权和状态 [ 'pet_id', new PetOwnershipValidator($this, ['current_user_id']), 'msg' => '宠物验证失败' ], // 验证偷菜操作是否有效 [ 'plant_id', new PetStealValidator($this, ['current_user_id', 'user_id']), 'msg' => '偷菜操作验证失败' ] ]; } /** * 设置默认值 * * @return array */ public function default(): array { return []; } /** * 字段翻译 * * @return array */ public function translates(): array { return [ 'user_id' => '被偷玩家ID', 'pet_id' => '宠物ID', 'plant_id' => '作物ID', 'current_user_id' => '当前用户ID', ]; } }