'require|integer|gt:0', 'placeholder_config' => 'require|array', 'fill_data' => 'require|array', 'output_filename' => 'chsAlphaNum|max:100' ]; protected $message = [ 'template_id.require' => '模板ID不能为空', 'template_id.integer' => '模板ID必须是整数', 'template_id.gt' => '模板ID必须大于0', 'placeholder_config.require' => '占位符配置不能为空', 'placeholder_config.array' => '占位符配置格式错误', 'fill_data.require' => '填充数据不能为空', 'fill_data.array' => '填充数据格式错误', 'output_filename.chsAlphaNum' => '文件名只能包含中文、字母和数字', 'output_filename.max' => '文件名长度不能超过100个字符' ]; protected $scene = [ 'savePlaceholderConfig' => ['template_id', 'placeholder_config'], 'generateDocument' => ['template_id', 'fill_data', 'output_filename'] ]; /** * 验证占位符配置 * @param $value * @param $rule * @param $data * @return bool|string */ protected function checkPlaceholderConfig($value, $rule, $data) { if (!is_array($value)) { return '占位符配置必须是数组格式'; } foreach ($value as $placeholder => $config) { if (!isset($config['name']) || empty($config['name'])) { return "占位符 {$placeholder} 的显示名称不能为空"; } if (!isset($config['data_source']) || !in_array($config['data_source'], ['database', 'manual'])) { return "占位符 {$placeholder} 的数据源类型无效"; } if ($config['data_source'] === 'database') { if (empty($config['table_name']) || empty($config['field_name'])) { return "占位符 {$placeholder} 的数据库配置不完整"; } } if (!isset($config['is_required'])) { return "占位符 {$placeholder} 必须指定是否必填"; } } return true; } /** * 验证填充数据 * @param $value * @param $rule * @param $data * @return bool|string */ protected function checkFillData($value, $rule, $data) { if (!is_array($value)) { return '填充数据必须是数组格式'; } // 这里可以添加更多的数据验证逻辑 // 比如验证必填字段、数据格式等 return true; } }