1], ['amount', 'required'], ['amount', 'number'], ['amount', 'min', 'range' => 0.0000000001], // 最小金额 0.0000000001 钻石 // 可选字段验证 ['order_id', 'string'], ['order_id', 'max', 'range' => 100], ['remark', 'string'], ['remark', 'max', 'range' => 255], // 业务验证(按顺序执行) [ 'user_id', new UserExistenceValidator($this, ['user']), 'msg' => '目标用户不存在或状态异常', 'when' => function($data) { return isset($data['user_id']); } ], [ 'amount', new DiamondAmountValidator($this, ['formattedAmount']), 'msg' => '钻石金额格式错误或超出精度范围', 'when' => function($data) { return isset($data['amount']); } ], ]; } /** * 获取验证后的安全数据 * * @param bool $asObject 是否返回对象 * @return array|object */ public function getSafeData(bool $asObject = false): array|object { $data = parent::getSafeData($asObject); // 如果返回对象,直接返回 if ($asObject) { return $data; } // 使用格式化后的金额 if ($this->formattedAmount !== null) { $data['amount'] = $this->formattedAmount; } return $data; } /** * 获取字段标签 * * @return array */ public function attributeLabels(): array { return [ 'user_id' => '目标用户ID', 'amount' => '充值金额', 'order_id' => '订单号', 'remark' => '备注', ]; } }