[TOC]
# [**表单构建器**](https://www.kancloud.cn/ruoshuiyx/siyucms/1175202)
构建表单时我们有时候会向斗个表单添加额外的信息比如属性或者类等
```
$model = '\app\common\model\\' . $this->modelName;
$info = $model::edit($id)->toArray();//获得由字段名为键字段值为值组成的一维数组
// 获取【添加页面】可展示的字段信息
$columns = MakeBuilder::getAddColumns($this->tableName, $info);
//然后遍历出每个字段进行操作
/**
//通用去掉的字段
protected $ty_field=[
'status',
'sort',
'create_time',
'update_time'
];
**/
foreach ($columns as $key=>&$v){
//通用去掉的字段
if( in_array($v[1],$this->ty_field)){
unset($columns[$key]);
}
/*排除某个下拉框*/
if(isset($v[6]) && $v[1] !='open_tenders_result'){
//存在下标6且
//多行文本框textarea、标签tag、密码框password、单图片上传image、多图片上传images、单文件上传file、多文件上传files、取色器color 为5
//数字输入框number、多级联动linkage 8
//隐藏表单项hidden 3
if($v[0]=='textarea'){
$v[5] = $v[5]==''?'readonly = "readonly"':'';
}else{
$v[6] = $v[6]=='' ?' readonly = "readonly" ':'';
}
}
//向表单添加只读属性
switch ($v[0]) {
//额外属性在$v[3]
case 'hidden':
case 'button':
# code...
break;
//额外属性在$v[5]
case 'textarea':
case 'tag':
case 'password':
case 'image':
case 'images':
case 'file':
case 'files':
case 'color':
$v[5] = $v[5]==''?'readonly = "readonly"':'';
break;
//额外属性在$v[6]
case 'text':
case 'radio':
case 'checkbox':
case 'date':
case 'time':
case 'datetime':
case 'daterange':
case 'select':
case 'select2':
case 'editor':
$v[6] = $v[6]=='' ?' readonly = "readonly" ':'';
break;
//额外属性在$v[8]
case 'number':
case 'linkage':
$v8] = $v[8]=='' ?' readonly = "readonly" ':'';
break;
default:
# code...
break;
}
}
```
## **单行文本**
addText($name = '', $title = '', $tips = '', $default = '', $group = [], $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
| 参数 | 含义 | 类型 | 必填 |
| --- | --- | --- | --- |
| name | 字段名称(英文) | string | 是 |
| title | 字段别名(中文) | string | 是 |
| tips | 提示信息 | string | 否 |
| default | 默认值 | string | 否 |
| group | 标签组 | array | 否 |
| extra\_attr | 额外属性 | string | 否 |
| extra\_class | 额外css类 | string | 否 |
| placeholder | 占位符 | string | 否 |
| required | 是否必填 | bool | 否 |
```
->addText(
'signName',
'签名名称',
'<a href="https://help.aliyun.com/document_detail/108072.html" target="_blank">【签名简介】</a><a href="https://dysms.console.aliyun.com/dysms.htm#/domestic/text/sign" target="_blank">【查看签名】</a>'
)
```
![](https://img.kancloud.cn/da/ff/daff513b74bd1d5400e63c4598bf3205_727x36.png)
## **tab页由字段分组决定**
新建模型【单页测试】单页模式选项改选为【是】,然后在【字段分组】页面添加将属于【单页测试】模块的分组1和分组2
然后在【字段管理】页添加两个字段name、title,在【所属分组】项分别将两个字段放入的分组1和分组2
![](https://img.kancloud.cn/41/71/417100a3257abca5655e44a8b1bb1f46_781x279.png)
## **fetch**
FormBuilder::fetch() 分配变量和渲染模板
```
View::assign($this->_vars);
return View::fetch($this->_template);
```
## **多行文本**
addTextarea($name = '', $title = '', $tips = '', $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false, $rows = 3)
| 参数 | 含义 | 类型 | 必填 | 版本 |
| --- | --- | --- | --- | --- |
| name | 字段名称(英文) | string | 是 | |
| title | 字段别名(中文) | string | 是 | |
| tips | 提示信息 | string | 否 | |
| default | 默认值 | string | 否 | |
| extra\_attr | 额外属性 | string | 否 | |
| extra\_class | 额外css类 | string | 否 | |
| placeholder | 占位符 | string | 否 | |
| required | 是否必填 | bool | 否 | |
| rows | 高度(行数) | string | 否 | V6.1.6 |
多行文本框一般只需要两个参数(name, title),其他项目均为选填项。
## addDate 等时间组件都是[daterangepicker](www.daterangepicker.cn)封装出来的
~~~
return FormBuilder::getInstance()
->addTextarea('remarks', '备注')
~~~
![](https://img.kancloud.cn/42/f5/42f54df173f49be8aea4d876e8691064_639x149.png)
```
/**
* 获取句柄
* @return FormBuilder
*/
public static function getInstance()
{
if (is_null(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
/**
* 渲染模版
* @param string $template 模板文件名或者内容
* @return string
* @throws \Exception
*/
public function fetch(string $template = '')
/**
* 设置页面标题
* @param string $title 页面标题
* @return $this
*/
public function setPageTitle(string $title = '')
/**
* 设置表单页提示信息
* @param string $tips 提示信息
* @param string $type 提示类型:danger,info,warning,success
* @param string $pos 提示位置:top,search,bottom
* @return $this
*/
public function setPageTips(string $tips = '', string $type = 'info', string $pos = 'top')
/**
* 隐藏<显示全部>按钮
* @param string $url 链接地址
* @return $this
*/
public function hideShowAll()
/**
* 设置表单提交地址
* @param string $form_url 提交地址
* @return $this
*/
public function setFormUrl(string $form_url = '')
/**
* 设置表单提交方式
* @param string $value 提交方式
* @return $this
*/
public function setFormMethod(string $value = '')
/**
* 模板变量赋值
* @param mixed $name 要显示的模板变量
* @param string $value 变量的值
* @return $this
*/
public function assign($name, $value = '')
/**
* 隐藏按钮
* @param array|string $btn 要隐藏的按钮,如:['submit'],其中'submit'->确认按钮,'back'->返回按钮
* @return $this
*/
public function hideBtn($btn = [])
/**
* 设置按钮标题
* @param string|array $btn 按钮名 'submit' -> “提交”,'back' -> “返回”
* @param string $title 按钮标题
* @return $this
*/
public function setBtnTitle($btn = '', string $title = '')
/**
* 添加额外按钮
* @param string $btn 按钮内容
* @return $this
*/
public function addBtn(string $btn = '')
/**
* 设置额外HTML代码
* @param string $extra_html 额外HTML代码
* @param string $pos 位置 [top和bottom]
* @return $this
*/
public function setExtraHtml(string $extra_html = '', string $pos = '')
/**
* 设置额外JS代码
* @param string $extra_js 额外JS代码
* @return $this
*/
public function setExtraJs(string $extra_js = '')
/**
* 设置额外CSS代码
* @param string $extra_css 额外CSS代码
* @return $this
*/
public function setExtraCss(string $extra_css = '')
/**
* 设置提交表单时显示确认框
* @return $this
*/
public function submitConfirm()
/**
* 添加单行文本框
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param array $group 标签组,可以在文本框前后添加按钮或者文字
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addText($name = '', $title = '', $tips = '', $default = '', $group = [], $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加多行文本框
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @param int $rows 高度(以行数计)
* @return $this|array
*/
public function addTextarea($name = '', $title = '', $tips = '', $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false, $rows = 3)
/**
* 添加单选
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param array $options 单选数据
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param bool $required 是否必选
* @return $this|array
*/
public function addRadio($name = '', $title = '', $tips = '', $options = [], $default = '', $extra_attr = '', $extra_class = '', $required = false)
/**
* 添加复选框
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param array $options 复选框数据
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param bool $required 是否必选
* @return $this|array
*/
public function addCheckbox($name = '', $title = '', $tips = '', $options = [], $default = '', $extra_attr = '', $extra_class = '', $required = false)
/**
* 添加日期
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $format 日期格式
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addDate($name = '', $title = '', $tips = '', $default = '', $format = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加时间
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $format 时间格式
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addTime($name = '', $title = '', $tips = '', $default = '', $format = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加日期时间
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $format 日期格式
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addDatetime($name = '', $title = '', $tips = '', $default = '', $format = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加日期范围
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $format 日期格式
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param bool $required 是否必填
* @return $this|array
*/
public function addDaterange($name = '', $title = '', $tips = '', $default = '', $format = '', $extra_attr = '', $extra_class = '', $required = false)
/**
* 添加标签
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param bool $required 是否必填
* @return $this|array
*/
public function addTag($name = '', $title = '', $tips = '', $default = '', $extra_attr = '', $extra_class = '', $required = false)
/**
* 添加数字输入框
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $min 最小值
* @param string $max 最大值
* @param string $step 步进值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类
* @param bool $required 是否必填
* @return $this|array
*/
public function addNumber($name = '', $title = '', $tips = '', $default = '', $min = '', $max = '', $step = '', $extra_attr = '', $extra_class = '', $required = false)
/**
* 添加密码框
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addPassword($name = '', $title = '', $tips = '', $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加普通下拉菜单
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param array $options 选项
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类
* @param string $placeholder 占位符
* @param bool $required 是否必选
* @return $this|array
*/
public function addSelect($name = '', $title = '', $tips = '', $options = [], $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加下拉菜单select2
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param array $options 选项
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @param string $ajax_url ajax 地址(传递时无需再传递选项值)
* @return $this|array
*/
public function addSelect2($name = '', $title = '', $tips = '', $options = [], $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false, $ajax_url = '')
/**
* 添加单图片上传
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addImage($name = '', $title = '', $tips = '', $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加多图片上传
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addImages($name = '', $title = '', $tips = '', $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加单文件上传
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addFile($name = '', $title = '', $tips = '', $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加多文件上传
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addFiles($name = '', $title = '', $tips = '', $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加编辑器
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $height 高度
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param bool $required 是否必填
* @return $this|array
*/
public function addEditor($name = '', $title = '', $tips = '', $default = '', $height = '', $extra_attr = '', $extra_class = '', $required = false)
/**
* 添加按钮
* @param string $name 按钮名称(id)
* @param string $title 字段别名
* @param array $attr 按钮属性
* @param string $elemtype 按钮类型,默认为button,也可以为a标签
* @return $this|array
*/
public function addButton($name = '', $title = '', $attr = [], $elemtype = 'button')
/**
* 添加隐藏表单项
* @param string $name 字段名称
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @return $this|array
*/
public function addHidden($name = '', $default = '', $extra_attr = '', $extra_class = '')
/**
* 添加取色器
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @return $this|array
*/
public function addColor($name = '', $title = '', $tips = '', $default = '', $extra_attr = '', $extra_class = '', $placeholder = '', $required = false)
/**
* 添加代码编辑器
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $default 默认值
* @param string $height 高度
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类名
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @param string $mode 编程语言(htmlmixed/javascript/css)
* @param string $theme 主题
* @return $this|array
*/
public function addCode($name = '', $title = '', $tips = '', $default = '', $height = '', $extra_attr = '', $extra_class = '', $required = false, $mode = 'htmlmixed', $theme = 'monokai')
/**
* 添加自定义Html
* @param string $html html代码
* @return $this|array
*/
public function addHtml($html = '')
/**
* 添加多级联动
* @param string $name 字段名称
* @param string $title 字段别名
* @param string $tips 提示信息
* @param string $model 模型名称
* @param string $level 级别
* @param string $default 默认值
* @param array|string $fields 字段名,默认为id,name,pid
* @param string $extra_attr 额外属性
* @param string $extra_class 额外css类
* @param string $placeholder 占位符
* @param bool $required 是否必填
* @param string $ajax_url ajax 地址
* @return $this|array
*/
public function addLinkage($name = '', $title = '', $tips = '', $model = '', $level = 2, $default = '', $fields = [], $extra_attr = '', $extra_class = '', $placeholder = '', $required = false, $ajax_url = '')
/**
* 添加表单项 [别名方法]
* @param string $type 表单项类型
* @param string $name 表单项名,与各自方法中的参数一致
* @return $this
*/
public function addFormItem($type = '', $name = '')
/**
* 一次性添加多个表单项
* @param array $items 表单项
* @return $this|array
*/
public function addFormItems($items = [])
/***
* 设置表单项的值
*/
private function setFormValue()
/**
* 添加分组
* @param array $groups 分组数据
* @return mixed
*/
public function addGroup($groups = [])
```
- 空白目录
- php语法结构
- 安装与更新
- 开启调试模式及代码跟踪器
- 架构
- 源码分析
- 应用初始化
- 请求流程
- 中间件源码分析
- 请求处理源码分析
- Request源码分析
- 模板编译流程
- 路由与请求流程
- 容器
- 获取目录位置
- 入口文件
- 多应用模式及URL访问
- 依赖注入与容器
- 容器属性及方法
- Container
- App
- facade
- 中间件(middleware)
- 系统服务
- extend 扩展类库
- 笔记
- 配置
- env配置定义及获取
- 配置文件的配置获取
- 单应用模式-(配置)文件目录结构(默认)
- 多应用模式(配置)文件目录结构(配置文件)
- 配置文件
- 应用配置:app.php
- 缓存配置: cache.php
- 数据库配置:database.php
- 路由和URL配置:route.php
- Cookie配置:cookie.php
- Session配置:session.php
- 命令行配置:console.php
- 多语言配置:lang.php
- 日志配置:log.php
- 页面Trace配置:trace.php
- 磁盘配置: filesystem.php
- 中间件配置:middleware.php
- 视图配置:view.php
- 改成用yaconf配置
- 事件
- 例子:省略事件类的demo
- 例子2:完整事件类
- 例子3:事件订阅,监听多个事件
- 解析
- 路由
- 路由定义
- 路由地址
- 变量规则
- MISS路由
- URL生成
- 闭包支持
- 路由参数
- 路由中间件
- 路由分组
- 资源路由
- 注解路由
- 路由绑定
- 域名路由
- 路由缓存
- 跨域路由
- 控制器
- 控制器定义
- 空控制器、空操作
- 空模块处理
- RESTFul资源控制器
- 控制器中间件
- 请求对象Request(url参数)
- 请求信息
- 获取输入变量($_POST、$_GET等)
- 请求类型的获取与伪装
- HTTP头信息
- 伪静态
- 参数绑定
- 请求缓存
- 响应对象Response
- 响应输出
- 响应参数
- 重定向
- 文件下载
- 错误页面的处理办法
- 应用公共文件common.php
- 模型
- 模型定义及常规属性
- 模型数据获取与模型赋值
- 查询
- 数据集
- 增加
- 修改
- 删除
- 条件
- 查询范围scope
- 获取器
- 修改器
- 搜索器
- 软删除
- 模型事件
- 关联预载入
- 模型关联
- 一对一关联
- 一对多关联
- 多对多关联
- 自动时间戳
- 事务
- 数据库
- 查询构造器
- 查询合集
- 子查询
- 聚合查询
- 时间查询
- 视图查询(比join简单)
- 获取查询参数
- 快捷方法
- 动态查询
- 条件查询
- 打印sql语句
- 增
- 删
- 改
- 查
- 链式操作
- 查询表达式
- 分页查询
- 原生查询
- JSON字段
- 链接数据库配置
- 分布式数据库
- 查询事件
- Db获取器
- 事务操作
- 存储过程
- Db数据集
- 数据库驱动
- 视图
- 模板
- 模板配置
- 模板位置
- 模板渲染
- 模板变量与赋值(assign)
- 模板输出替换
- url生成
- 模板详解
- 内置标签
- 三元运算
- 变量输出
- 函数输出
- Request请求参数
- 模板注释及原样输出
- 模板继承
- 模板布局
- 原生PHP
- 模板引擎
- 视图过滤
- 视图驱动
- 验证
- 验证进阶之最终版
- 错误和日志
- 异常处理
- 日志处理
- 调试
- 调试模式
- Trace调试
- SQL调试
- 变量调试
- 远程调试
- 杂项
- 缓存
- Session
- Cookie
- 多语言
- 上传
- 扩展说明
- N+1查询
- TP类库
- 扩展类库
- 数据库迁移工具
- Workerman
- think助手工具库
- 验证码
- Swoole
- request
- app
- Response
- View
- Validate
- Config
- 命令行
- 助手函数
- 升级指导(功能的添加与删除说明)
- siyucms
- 开始
- 添加页面流程
- 列表页加载流程
- 弹出框
- 基础控制器
- 基础模型
- 快速构建
- 表单form构建
- 表格table构建
- MakeBuilder
- 前端组件
- 日期组件
- layer 弹层组件
- Moment.js 日期处理插件
- siyucms模板布局
- 函数即其变量
- 前端页面
- $.operate.方法
- $.modal.方法:弹出层
- $.common.方法:通用方法
- 被cms重写的表格options
- 自定义模板
- 搜索框
- 自定义form表单
- 获取表单搜索参数并组装为url字符串