代码示例
namespace plugin\xbCode\app\demo\controller;
use support\Request;
use plugin\xbCode\XbController;
use plugin\xbCode\builder\Builder;
use plugin\xbCode\builder\Renders\Form;
class AudioDemoController extends XbController
{
/**
* 添加带音频上传的示例表单
* @param \support\Request $request
* @return \support\Response
*/
public function add(Request $request)
{
if ($request->method() === 'POST') {
$post = $request->post();
// 这里的 audio 字段就是上传后的音频地址 / 对象
// TODO: 根据你的业务保存 $post['audio']
// 保存逻辑略
return $this->success('保存成功');
}
$builder = Builder::form(function (Form $builder) {
// 不包面板,仅示例,可按需调整
$builder->useForm()->wrapWithPanel(false);
// 添加上传音频组件
$builder->addRowUploadAudio('audio', '音频文件')
// 仅允许选择音频类型(浏览器 accept,前端校验)
->accept('audio/*')
// 单文件上传(如需多文件传 true)
->multiple(false)
// 限制最大 10MB
->maxSize(10 * 1024 * 1024)
// 选择后自动上传
->autoUpload(true)
// 按需选择是否允许拖拽上传
->drag(true)
// 描述信息
->description('仅支持 mp3、wav 等音频格式,最大 10MB');
});
// 表单提交方法
$builder->setMethod('POST');
return $this->successRes($builder);
}
}
通用组件参数
| 参数名 | 类型 | 说明 |
|---|
| type | string | 渲染器类型(组件类型) |
| className | string | 外层 Dom 的类名 |
| style | array | 外层 Dom 样式 |
| ref | string | 组件引用 id |
| disabled | bool | 是否禁用 |
| disabledOn | string | 禁用条件表达式 |
| disabledTip | string | 按钮失效提示文案 |
| hidden | bool | 是否隐藏 |
| hiddenOn | string | 隐藏条件表达式 |
| visible | bool | 是否可见 |
| visibleOn | string | 可见条件表达式 |
| id | string | 组件 ID |
| value | mixed | 组件值 |
| onEvent | array | 事件配置 |
| getValue | mixed | 组件取值时自定义处理(前端 schema) |
| setValue | mixed | 组件赋值提交时自定义处理(前端 schema) |
| onDelete | mixed | 删除时自定义处理(前端 schema) |
| defaultAttr | - | 默认属性(内部使用) |
这些参数可以在任何组件上通过链式调用设置,例如:$component->className('w-full')->hiddenOn('this.disabled');
通用表单项参数
| 参数名 | 类型 | 说明 |
|---|
| size | string | 表单项尺寸:xs、sm、base、md、lg |
| label | string | 表单项标签(字段显示名称) |
| labelClassName | string | 标签区域 CSS 类名 |
| name | string | 字段名(提交时使用的 key) |
| remark | string | 备注文字 |
| clearable | string | 是否可清除(AMIS 里通常是 bool,builder 这里按 string 透传) |
| labelRemark | string | 标签旁的小图标提示文字 |
| hint | string | 输入框下方的提示信息 |
| submitOnChange | string | 值变化时是否立即提交 |
| readOnly | string | 是否只读 |
| readOnlyOn | string | 只读条件表达式 |
| validateOnChange | string | 值变化时是否触发校验 |
| description | string | 描述信息(显示在组件下方) |
| desc | string | 描述信息别名(等价于 description) |
| descriptionClassName | string | 描述信息 CSS 类名 |
| mode | string | 展示模式(normal、inline 等) |
| horizontal | string | 水平布局配置(跟 AMIS 一致,通常是对象,这里透传) |
| inline | string | 是否内联布局 |
| inputClassName | string | 输入区域 CSS 类名 |
| placeholder | string | 占位提示文本 |
| required | bool | 是否必填 |
| requiredOn | string | 必填条件表达式 |
| validationErrors | array | 各验证规则对应的错误文案 |
| validations | array | 验证规则配置 |
| value | mixed | 默认值 |
| clearValueOnHidden | string | 隐藏时是否清空当前字段值 |
| validateApi | string | int | 远程验证 API 配置 |
| columnRatio | string | int | 在一行中的宽度占比(如 3、6、12) |
音频组件参数
| 参数名 | 类型 | 说明 |
|---|
| type | string | 组件类型,固定为 'input-file' |
| receiver | string | 上传文件接口地址(构造函数中默认 ${UPLOAD_FILE_API}) |
| accept | string | 支持的文件类型,例:audio/*、.mp3,.wav 等 |
| capture | string | 移动端 input[type=file] 的 capture 属性,控制音频来源(如麦克风) |
| asBase64 | bool | 是否将文件内容以 base64 形式赋值 |
| asBlob | bool | 是否将文件以二进制 Blob 形式赋值 |
| maxSize | int | 单个文件大小限制(单位:B,字节) |
| maxLength | int | 一次最多上传的文件数量 |
| multiple | bool | 是否允许一次选择多个文件 |
| drag | bool | 是否启用拖拽上传 |
| joinValues | bool | 是否将多文件值用分隔符拼接为字符串 |
| extractValue | bool | 是否只提取文件的某个字段值(配合 valueField) |
| delimiter | string | joinValues 时使用的分隔符 |
| autoUpload | bool | 选择文件后是否自动开始上传 |
| hideUploadButton | bool | 是否隐藏上传按钮(通常配合拖拽区域使用) |
| stateTextMap | array | 上传状态文案映射,如 { init: '准备中', uploading: '上传中', error: '出错', ... } |
| fileField | string | 表单中文件二进制字段名(FormData 里对应的字段) |
| nameField | string | 文件名字段名 |
| valueField | string | 提交时作为“值”的字段名(如文件 ID、URL 等) |
| urlField | string | 文件下载地址字段名 |
| btnLabel | string | 上传按钮文字 |
| downloadUrl | bool | string | 是否支持下载 / 下载 URL 模板 |
| useChunk | bool | string | 是否启用分块上传 |
| chunkSize | int | 分块大小,默认 5MB(构造函数中未改动,沿用 AMIS 默认) |
| startChunkApi | string | 分块上传开始接口(构造函数中默认 ${UPLOAD_CHUNK_START_API}) |
| chunkApi | string | 分块上传接口(构造函数中默认 ${UPLOAD_CHUNK_API}) |
| finishChunkApi | string | 分块上传完成接口(构造函数中默认 ${UPLOAD_CHUNK_FINISH_API}) |
| concurrency | int | 分块上传时并发请求数 |
| documentation | string | 文档说明内容(可在前端展示为帮助说明) |
| documentLink | string | 文档链接地址 |
| initAutoFill | bool | 表单反显时是否执行 autoFill(用于回填已有文件信息) |