🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 表单组件 表单组件用于在 update 或 add 页面生成对应的表单项, 表单组件继承`app\common\component\FormComponent` ### 常用组件说明 #### Input 基础组件 用于生成基础的 Input ##### 参数 无 ##### 示例 ```php public $updateFields = [ 'name' => ['text', 'require'], // 如无法找到对应的组件将默认使用 input 组件, 并且组件名将作为 input 的类 'price' => ['input', 'require'], ]; ``` #### Area 地区选择器 用于生成一个地区选择器 ##### 参数 `type`: 类型, 目前支持 `province`, `city`, `area` , 使用 `city` 类型必须要有一个同组的 `province` 类型, 使用`area` 类型需要有一个同组的 `city` 类型 和 一个同组的 `province` `group`: 分组id, `group` 相同的才能产生交互效果 ##### 示例 ```php public $updateFields = [ 'province' => ['area', 'require', null, [ 'type' => 'province', 'group' => 1 ]], 'city' => ['area', null, null, [ 'type' => 'city', 'group' => 1 ]], 'target_province' => ['area', 'require', null, [ 'type' => 'province', 'group' => 2 ]], 'target_city' => ['area', 'require', null, [ 'type' => 'city', 'group' => 2 ]] ]; // 这里用到了两组 area 组件, 所以需要设置 group, 一般情况下, 如果只有一组 area 就不需要设置 group ``` #### Checkbox 多选组件 生成一个多选的 checkbox ##### 参数 `table`: 使用该参数的表的查询结果作为选择项 `field`: 需要用到的字段, 当 `format` 参数为空时, 只能填写一个字段, 并且该字段将作为选择项显示的内容 `value`: 作为值的字段 `format`: 展示的格式, 该字段存在时, `field` 参数可以是多个字段, "hello \*field\*" 中 "\*field\*" 将会被替换成字段 field 的值 `join`: 数据库查询时 join 的规则, 同 `think\Db::join` 方法参数格式相同 `where` 数据库查询时 where 的规则, 同 `think\Db::where` 方法参数格式相同 `list`: 当该参数存在时, 将使用该数据作为查询的结果, `list` 与 `table` 只能存在一个 ##### 示例 ```php public $addFields = [ 'role_node.nid' => ['checkbox', 'require', null, [ 'table' => 'node', 'field' => 'module, controller, action', 'value' => 'id', 'format' => '/*module*/*controller*/*action*' ]], ]; ``` #### Hidden 隐藏域 生成一个隐藏的 input ##### 参数 无 ##### 示例 ```php public $updateFields = [ 'price' => ['hidden', 'require'], ]; ``` #### Html 富文本 生成一个富文本编辑器 ##### 参数 无 ##### 示例 ```php public $updateFields = [ 'information' => ['html'], ]; ``` #### Image 图片选择 生成一个图片上传工具, 支持多选 ##### 参数 无 ##### 示例 ```php public $updateFields = [ 'thumb' => ['image', 'require'], 'banners' => 'image', ]; ``` #### Password 密码组件 生成一个密码类型的 input, **该组件在未填写时将该字段从需要写入数据库的数组中删除, 并且不会将数据库对应字段的值渲染到前端** ##### 参数 无 ##### 示例 ```php // 编辑账号信息时账号可以留空, 留空则不会修改原始密码 public $updateFields = [ 'password' => ['password', null, '无需修改的话, 请勿填写!'], ]; // 添加账号时必须填写密码 public $addFields = [ 'password' => ['password', 'require'], ]; ``` #### Readonly 只读属性 生成一个只读的 input, **该组件不会将内容传至后端, 一般仅用作展示内容** ##### 参数 无 ##### 示例 ```php public $updateFields = [ 'create_time' => 'readonly', ]; ``` #### Selector 选择器 生成一个单选的 select, **用法和参数与 checkbox 组件完全相同** ##### 参数 `table`: 使用该参数的表的查询结果作为选择项 `field`: 需要用到的字段, 当 `format` 参数为空时, 只能填写一个字段, 并且该字段将作为选择项显示的内容 `value`: 作为值的字段 `format`: 展示的格式, 该字段存在时, `field` 参数可以是多个字段, "hello \*field\*" 中 "\*field\*" 将会被替换成字段 field 的值 `join`: 数据库查询时 join 的规则, 同 `think\Db::join` 方法参数格式相同 `where` 数据库查询时 where 的规则, 同 `think\Db::where` 方法参数格式相同 `list`: 当该参数存在时, 将使用该数据作为查询的结果, `list` 与 `table` 只能存在一个 ##### 示例 ```php public $updateFields = [ '$1.rid' => ['selector', 'require', null, [ 'table' => 'role', 'field' => 'name', 'value' => 'id' ]], ]; ``` #### Textarea 多行文本 生成一个多行文本的 textarea ##### 参数 无 ##### 示例 ```php public $updateFields = [ 'description' => 'textarea' ]; ``` ### 自定义表单组件 **阅读该说明前请先确认你已经看过了 [视图组件.md](视图组件.md) 和 [搜索组件.md](搜索组件.md)中的自定义搜索组件** 与自定义表单组件相同, 如果默认提供的组件无法满足你的需求, 你也可以像[搜索组件.md](搜索组件.md)中的自定义搜索组件中一样 可以使用一个模板作为组件 也可以创建自己的表单组件 #### 使用模板作路径为组件名 第一种方式与[搜索组件.md](搜索组件.md)相同, 只有模板变量的定义不同: ##### 模板变量说明: `fieldName`: 字段展示名, `field`: 字段名 `msg`: 提示信息 `value`: 数据库对应字段的值, **只有在 update 页面时才有, 使用时先判断** `data`: 组件参数, 由于该值是可选的, 使用前请先判断是否存在, `def`: 默认值 #### 创建自己的表单组件 该方法也与 [搜索组件.md](搜索组件.md) 类似, 表单组件命名前缀为 `Form` 所有的表单组件需要继承 `app\common\component\FormComponent` 表单组件的类中有用于处理表单返回值的 `getParam` 方法, 定义如下: ```php abstract class FormComponent extends Component { /** * 获取表单返回值 * @param $value mixed 表单返回值 * @param $key string 字段名 * @param $data array 完整的表单数组 * @return mixed */ public static function getParam ($value, $key = null, &$data = null) { if ($key !== null && $data !== null) $data[$key] = $value; return $value; } } ``` **如需对返回值做特殊处理, 请重写该方法** ##### 表单组件的模板变量定义如下: `fieldName`: 字段展示名, `field`: 字段名 `msg`: 提示信息 `value`: 数据库对应字段的值, **只有在 update 页面时才有, 使用时先判断** `data`: 组件参数, 由于该值是可选的, 使用前请先判断是否存在, `def`: 默认值