4.7. 数据表单 Form
数据表单
快速入门
ModStart\Form\Form
类用于快速生成表单页面,参照例子 数据表格→快速入门
可以通过如下代码快速定义个数据表单
return Form::make('blog', function (Form $form) {
// 定义标题字段,格式为单行文本
$form->text('title', '标题');
// 定义封面字段,格式为单张图片
$form->image('cover', '封面');
// 定义摘要字段,格式为多行文本
$form->textarea('summary', '摘要');
// 定义内容字段,格式为富文本
$form->richHtml('content', '内容');
});
获取当前模型数据
在闭包内可以获取到当前模型的数据
return Form::make('blog', function (Form $form) {
dd($form->item());
});
数据保存阶段自定义处理
保存前
$form->hookSaving(function (Form $form) {
if ($form->isModeAdd()) {
// 增加模式
$data = $form->dataAdding();
$data['xxx'] = 'xxx';
// 替换入库数据
$form->dataAdding($data);
} else if ($form->isModeEdit()) {
// 修改
$data = $form->dataEditing();
$data['xxx'] = 'xxx';
// 替换入库数据
$form->dataEditing($data);
}
});
保存后
$form->hookSaved(function(Form $form) {
// 保存后的操作
});
数据变更
$form->hookChanged(function (Form $form) {
// 可以在数据变更时自定义处理,一般用于清缓存等操作
});
删除前
$form->hookDeleting(function (Form $form) {
// 数据处理
});
删除后
$form->hookDeleted(function (Form $form) {
// 数据处理
});
字段组件基础
字段定义
$field = $form->text('xxx','字段名称');
字段自定义渲染
$field->hookRendering(function (AbstractField $field, $item, $index) {
// 是否为普通表单模式、增加表单模式、修改表单模式,可根据不同模式反馈不同的渲染内容
// $field->context()->isModeForm()
// $field->context()->isModeAdd()
// $field->context()->isModeEdit()
return <<<HTML
<div class="line">
<div class="label">内容</div>
<div class="field">
<div style="border:2px solid red;padding:10px;">
字段自定义显示,其中name需要和字段column相同
<input type="text" name="content" value="内容" />
</div>
</div>
</div>
HTML;
});
字段默认值
$field->defaultValue('默认值')
提示文字
$field->placeholder('提示文字')
只读模式
$field->readonly(true)
帮助文字
$field->help('帮助文字,支持HTML')
字段校验
// 字段必填
$field->required();
// 匹配URL
$field->ruleUrl();
// 在表中必须唯一
$field->ruleUnique('数据表')
// 匹配正则,目前正则中暂不能包含|
$field->ruleRegex('/^\d+$/');
字段组件库
显示 display
$form->display('field','名称');
单行文本 text
$form->text('field', '名称');
多选 checkbox
$form->checkbox('field', '名称');
标签 tags
$form->tags('field', '名称');
代码 code
$form->code('field', '名称');
树状组件 tree
$form->tree('field', '名称');
类型 type
// 基础用法
$form->type('field', '类型');
// 定义BaseType,同时指定类型颜色
$field->type(XxxStatus::class)
密码 password
$form->password('field', '类型');
单张图片 image
$form->image('field', '类型');
多张图片 images
$form->type('field', '类型');
多张图片(临时路径) imagesTemp
$form->type('field', '类型');
链接 link
$form->link('field', '类型');
开关 switch
$form->switch('field', '类型');
多行文本 textarea
$form->textarea('field', '类型');
颜色 color
$form->color('field', '类型');
日期 date
$form->date('field', '类型');
日期时间 datetime
$form->datetime('field', '类型');
时间 time
$form->time('field', '类型');
单选 radio
$form->radio('field', '类型');
下拉 select
// 基本使用
$form->select('field', '类型');
// 使用Type作为备选项,XxxType是继承BaseType的类
$field->optionType(XxxType::class);
// 使用数组作为备选项
$field->options(['1' => '选项1', '2' => '选项2']);
// 使用数组作为备选项
$field->optionArray([['id' => 1, 'name' => '选项1'], ['id' => 2, 'name' => '选项2']],'id','name');
// 使用模型作为备选项
$field->optionModel('forum_category','id','title');
// 使用模型作为备选项,并渲染为树状结构
$field->optionModelTree('forum_category','id','title');
富文本 richHtml
// 基础使用
$form->richHtml('field', '类型');
// 简单版富文本 simple default
$field->editorMode('simple');
// 保存时不经过XSS过滤
// 默认系统保存时会经过XSS过滤,如果是后台应用为了更灵活丰富的样式可选择不过滤XSS
$field->htmlFilter(false);
// 设置富文本后台接口
// 后台默认为 modstart_admin_url('data/ueditor')
// 前台用户默认modstart_web_url('member_data/ueditor')
$field->server('xxx');
Markdown markdown
$form->markdown('field', '类型');
键值对列表 keyValueList
$form->keyValueList('field', '类型');
多值 values
$form->values('field', '类型');
HTML html
$form->html('field', '类型');
数字 number
$form->number('field', '类型');
百分比 percent
$form->percent('field', '类型');
小数 decimal
$form->decimal('field', '类型');
货币 currency
$form->currency('field', '类型');
ID id
$form->id('field', '类型');
验证码 captcha
$form->captcha('field', '类型');
临时文件 fileTemp
$form->fileTemp('field', '类型');
文件 file
$form->file('field', '类型');
视频 video
$form->video('field', '类型');
音频 audio
$form->audio('field', '类型');
中国地区 areaChina
$form->areaChina('field', '类型');
隐藏域 hidden
$form->hidden('field', '类型');
图标 icon
$form->icon('field', '类型');
推荐文章: