表单页面在后台管理开发中,使用频率较高,主要用于数据的新增和修改。

如何使用

HisiPHP内置的表单构建器非常的简单,无需引入任何类库,与TP的模板赋值方法一样赋值即可,页面渲染方法与TP完全一致。下面提供一段示例代码,在后面的章节会针对不同的表单项做具体说明:

  1. <?php
  2. namespace app\test\admin;
  3. use app\common\controller\Admin;
  4. class Article extends Admin
  5. {
  6. // 表单构建器示例方法
  7. public function form()
  8. {
  9. $assign['buildForm'] = [
  10. 'items' => [
  11. [
  12. 'type' => 'markdown',
  13. 'title' => '文本框',
  14. 'name' => 'text',
  15. 'tips' => '这是一个表单提示',
  16. 'attrs' => [
  17. 'imageUpload' => true,
  18. ],
  19. ],
  20. [
  21. 'type' => 'text',
  22. 'title' => '文本框',
  23. 'name' => 'text',
  24. 'tips' => '这是一个表单提示',
  25. 'attrs' => [//扩展属性
  26. 'lay-verify' => 'required',// 必填
  27. ],
  28. ],
  29. [
  30. 'type' => 'text',
  31. 'title' => '带前缀',
  32. 'name' => 'prefix',
  33. 'prefix' => '<i class="fa fa-envelope"></i>',
  34. ],
  35. [
  36. 'type' => 'text',
  37. 'title' => '带后缀',
  38. 'name' => 'suffix',
  39. 'suffix' => '@mail.com',
  40. ],
  41. [
  42. 'type' => 'text',
  43. 'title' => '带前后缀',
  44. 'name' => 'prefix_suffix',
  45. 'prefix' => '<i class="fa fa-envelope"></i>',
  46. 'suffix' => '@mail.com',
  47. ],
  48. [
  49. 'type' => 'password',
  50. 'title' => '密码框',
  51. 'name' => 'password',
  52. ],
  53. [
  54. 'type' => 'textarea',
  55. 'title' => '文本域',
  56. 'name' => 'textarea',
  57. ],
  58. [
  59. 'type' => 'select',
  60. 'title' => '下拉框',
  61. 'name' => 'select',
  62. 'option' => ['北京', '上海', '广州'],
  63. ],
  64. [
  65. 'type' => 'select+',
  66. 'title' => '下拉框增强版',
  67. 'name' => 'select_plus',
  68. 'attrs' => [
  69. 'data-options' => [
  70. // 配置文档 https://maplemei.gitee.io/xm-select/#/component/options
  71. 'autoRow' => true,
  72. 'filterable' => false,
  73. 'clickClose' => true,
  74. 'tree' => [
  75. 'show' => true,
  76. 'strict' => true,
  77. ],
  78. 'prop' => [
  79. 'value' => 'id',
  80. ],
  81. 'model' => [
  82. 'label' => [
  83. 'type' => 'text',
  84. ],
  85. ],
  86. 'data' => [
  87. [
  88. 'id' => 1,
  89. 'name' => '北京',
  90. ],
  91. [
  92. 'id' => 2,
  93. 'name' => '上海',
  94. ],
  95. [
  96. 'id' => 3,
  97. 'name' => '广州',
  98. ],
  99. ]
  100. ],
  101. ],
  102. ],
  103. [
  104. 'type' => 'linkage',
  105. 'title' => '无限级联动',
  106. 'name' => 'linkage',
  107. 'url' => url('ajax'),
  108. 'lastValue' => false,
  109. ],
  110. [
  111. 'type' => 'tag',
  112. 'title' => '多标签',
  113. 'name' => 'tag',
  114. 'value' => '后台框架,hisiphp',
  115. ],
  116. [
  117. 'type' => 'date',
  118. 'title' => '时间选择器',
  119. 'name' => 'date',
  120. ],
  121. [
  122. 'type' => 'date',
  123. 'title' => '时间范围',
  124. 'name' => 'datetime',
  125. 'attrs' => [
  126. 'data-options' => [
  127. 'range' => true,
  128. ],
  129. ],
  130. ],
  131. [
  132. 'type' => 'radio',
  133. 'title' => '单选框',
  134. 'name' => 'radio',
  135. 'value' => 2,
  136. 'option' => [
  137. 1 => '北京',
  138. 2 => '上海',
  139. 3 => '重庆',
  140. ],
  141. ],
  142. [
  143. 'type' => 'checkbox',
  144. 'title' => '复选框',
  145. 'name' => 'checkbox',
  146. 'skin' => 'primary',
  147. 'value' => '2,3',
  148. 'option' => [
  149. 1 => '北京',
  150. 2 => '上海',
  151. 3 => '重庆',
  152. ],
  153. ],
  154. [
  155. 'type' => 'color',
  156. 'title' => '颜色选择器',
  157. 'name' => 'color',
  158. 'value' => '#000000',
  159. 'tips' => '这是一个颜色选择器',
  160. ],
  161. [
  162. 'type' => 'image',
  163. 'title' => '图片上传',
  164. 'name' => 'image',
  165. ],
  166. [
  167. 'type' => 'image',
  168. 'title' => '不带图片选择',
  169. 'name' => 'image2',
  170. 'attrs' => [
  171. 'pop' => false,
  172. ],
  173. ],
  174. [
  175. 'type' => 'images',
  176. 'title' => '多图片上传',
  177. 'name' => 'images',
  178. ],
  179. [
  180. 'type' => 'file',
  181. 'title' => '单文件上传',
  182. 'name' => 'file'
  183. ],
  184. [
  185. 'type' => 'files',
  186. 'title' => '多文件上传',
  187. 'name' => 'files',
  188. ],
  189. ],
  190. ];
  191. // 模板赋值并渲染
  192. return $this->assign($assign)->fetch();
  193. }
  194. }

渲染效果如下

image.png