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', '类型');

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~