PHP表單生成器,快速生成現代化的form表單。包含複選框、單選框、輸入框、下拉選擇框等元素以及省市區三級聯動、時間選擇、日期選擇、顏色選擇、樹型、文件/圖片上傳等功能。php
演示項目: 開源的高品質微信商城html
composer require xaboy/form-builder
git
$form = Form::create(Url::build('update',array('id'=>$id)),[ Form::input('menu_name','按鈕名稱',$menu['menu_name']), Form::select('pid','父級id',(string)$menu->getData('pid'))->setOptions(function()use($id){ $list = (Util::sortListTier(MenusModel::where('id','<>',$id)->select()->toArray(),'頂級','pid','menu_name')); $menus = [['value'=>0,'label'=>'頂級按鈕']]; foreach ($list as $menu){ $menus[] = ['value'=>$menu['id'],'label'=>$menu['html'].$menu['menu_name']]; } return $menus; })->filterable(1), Form::select('module','模塊名',$menu['module'])->options([['label'=>'總後臺','value'=>'admin'],['label'=>'總後臺1','value'=>'admin1']]), Form::input('controller','控制器名',$menu['controller']), Form::input('action','方法名',$menu['action']), Form::input('params','參數',MenusModel::paramStr($menu['params']))->placeholder('舉例:a/123/b/234'), Form::frameInputOne('icon','圖標',Url::build('admin/widget.widgets/icon',array('fodder'=>'icon')),$menu['icon'])->icon('ionic'), Form::number('sort','排序',$menu['sort']), Form::radio('is_show','是否菜單',$menu['is_show'])->options([['value'=>0,'label'=>'隱藏'],['value'=>1,'label'=>'顯示(菜單隻顯示三級)']]) ]); $form->setMethod('post')->setTitle('編輯權限'); $this->assign(compact('form')); return $this->fetch('public/form-builder');
$field = [ Form::select('cate_id','產品分類')->setOptions(function(){ $list = CategoryModel::getTierList(); foreach ($list as $menu){ $menus[] = ['value'=>$menu['id'],'label'=>$menu['html'].$menu['cate_name'],'disabled'=>$menu['pid']== 0];//,'disabled'=>$menu['pid']== 0]; } return $menus; })->filterable(1)->multiple(1), Form::input('store_name','產品名稱')->col(Form::col(8)), Form::input('store_info','產品簡介')->type('textarea'), Form::input('keyword','產品關鍵字')->placeholder('多個用英文狀態下的逗號隔開'), Form::input('unit_name','產品單位','件'), Form::frameImageOne('image','產品主圖片(305*305px)',Url::build('admin/widget.images/index',array('fodder'=>'image')))->icon('image')->width('100%')->height('550px'), Form::frameImages('slider_image','產品輪播圖(640*640px)',Url::build('admin/widget.images/index',array('fodder'=>'slider_image')))->maxLength(5)->icon('images')->width('100%')->height('550px')->spin(0), Form::number('price','產品售價')->min(0)->col(8), Form::number('ot_price','產品市場價')->min(0)->col(8), Form::number('give_integral','贈送積分')->min(0)->precision(0)->col(8), Form::number('postage','郵費')->min(0)->col(Form::col(8)), Form::number('sales','銷量')->min(0)->precision(0)->col(8), Form::number('ficti','虛擬銷量')->min(0)->precision(0)->col(8), Form::number('stock','庫存')->min(0)->precision(0)->col(8), Form::number('cost','產品成本價')->min(0)->col(8), Form::number('sort','排序')->col(8), Form::radio('is_show','產品狀態',0)->options([['label'=>'上架','value'=>1],['label'=>'下架','value'=>0]])->col(8), Form::radio('is_hot','熱賣單品',0)->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8), Form::radio('is_benefit','促銷單品',0)->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8), Form::radio('is_best','精品推薦',0)->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8), Form::radio('is_new','首發新品',0)->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8), Form::radio('is_postage','是否包郵',0)->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8) ]; $form = Form::create(Url::build('save')); $form->setMethod('post')->setTitle('添加產品')->components($field); $this->assign(compact('form')); return $this->fetch('public/form-builder');
$product = ProductModel::get($id); $form = Form::create(Url::build('update',array('id'=>$id)),[ Form::select('cate_id','產品分類',explode(',',$product->getData('cate_id')))->setOptions(function(){ $list = CategoryModel::getTierList(); foreach ($list as $menu){ $menus[] = ['value'=>$menu['id'],'label'=>$menu['html'].$menu['cate_name'],'disabled'=>$menu['pid']== 0];//,'disabled'=>$menu['pid']== 0]; } return $menus; })->filterable(1)->multiple(1), Form::input('store_name','產品名稱',$product->getData('store_name')), Form::input('store_info','產品簡介',$product->getData('store_info'))->type('textarea'), Form::input('keyword','產品關鍵字',$product->getData('keyword'))->placeholder('多個用英文狀態下的逗號隔開'), Form::input('unit_name','產品單位',$product->getData('unit_name')), Form::frameImageOne('image','產品主圖片(305*305px)',Url::build('admin/widget.images/index',array('fodder'=>'image')),$product->getData('image'))->icon('image')->width('100%')->height('550px'), Form::frameImages('slider_image','產品輪播圖(640*640px)',Url::build('admin/widget.images/index',array('fodder'=>'slider_image')),json_decode($product->getData('slider_image'),1))->maxLength(5)->icon('images'), Form::number('price','產品售價',$product->getData('price'))->min(0)->precision(2)->col(8), Form::number('ot_price','產品市場價',$product->getData('ot_price'))->min(0)->col(8), Form::number('give_integral','贈送積分',$product->getData('give_integral'))->min(0)->precision(0)->col(8), Form::number('postage','郵費',$product->getData('postage'))->min(0)->col(8), Form::number('sales','銷量',$product->getData('sales'))->min(0)->precision(0)->col(8), Form::number('ficti','虛擬銷量',$product->getData('ficti'))->min(0)->precision(0)->col(8), Form::number('stock','庫存',ProductModel::getStock($id)>0?ProductModel::getStock($id):$product->getData('stock'))->min(0)->precision(0)->col(8), Form::number('cost','產品成本價',$product->getData('cost'))->min(0)->col(8), Form::number('sort','排序',$product->getData('sort'))->col(8), Form::radio('is_show','產品狀態',$product->getData('is_show'))->options([['label'=>'上架','value'=>1],['label'=>'下架','value'=>0]])->col(8), Form::radio('is_hot','熱賣單品',$product->getData('is_hot'))->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8), Form::radio('is_benefit','促銷單品',$product->getData('is_benefit'))->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8), Form::radio('is_best','精品推薦',$product->getData('is_best'))->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8), Form::radio('is_new','首發新品',$product->getData('is_new'))->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8), Form::radio('is_postage','是否包郵',$product->getData('is_postage'))->options([['label'=>'是','value'=>1],['label'=>'否','value'=>0]])->col(8) ]); $form->setMethod('post')->setTitle('編輯產品'); $this->assign(compact('form')); return $this->fetch('public/form-builder');
當form提交成功後會調用 window.formCreate.formSuccess(res,$f,formData) 做爲回調方法github
namespace Test; use FormBuilder\Form; //input組件 $input = Form::input('goods_name','商品名稱'); //日期區間選擇組件 $dateRange = Form::dateRange( 'limit_time', '區間日期', strtotime('- 10 day'), time() ); //省市二級聯動組件 $cityArea = Form::city('address','收貨地址',[ '陝西省','西安市' ]); $checkbox = Form::checkbox('label','表單',[])->options([ ['value'=>'1','label'=>'好用','disabled'=>true], ['value'=>'2','label'=>'方便','disabled'=>true] ])->col(Form::col(12)); $tree = Form::treeChecked('tree','權限',[])->data([ Form::treeData(11,'leaf 1-1-1')->children([Form::treeData(13,'131313'),Form::treeData(14,'141414')]), Form::treeData(12,'leaf 1-1-2') ])->col(Form::col(12)->xs(12)); //建立form $form = Form::create('/save.php',[ $input,$dateRange,$cityArea,$checkbox,$tree ]); $html = $form->formRow(Form::row(10))->setMethod('get')->setTitle('編輯商品')->view(); //輸出form頁面 echo $html;
namespace \FormBuilder\Json
ajax
namespace \FormBuilder\Form
json
create
,執行create(el,callback)
便可生成表單* @method $this inline(Boolean $bool) 是否開啓行內表單模式 * @method $this labelPosition(String $labelPosition) 表單域標籤的位置,可選值爲 left、right、top * @method $this labelWidth(Number $labelWidth) 表單域標籤的寬度,全部的 FormItem 都會繼承 Form 組件的 label-width 的值 * @method $this showMessage(Boolean $bool) 是否顯示校驗錯誤信息 * @method $this autocomplete($bool = false) 原生的 autocomplete 屬性,可選值爲 true = off 或 false = on
* @method $this gutter(Number $gutter) 柵格間距,單位 px,左右平分 * @method $this type(String $type) 柵格的順序,在flex佈局模式下有效 * @method $this align(String $align) flex 佈局下的垂直對齊方式,可選值爲top、middle、bottom * @method $this justify(String $justify) flex 佈局下的水平排列方式,可選值爲start、end、center、space-around、space-between * @method $this className(String $className) 自定義的class名稱
參考: view row柵格佈局數組
* @method $this span(Number $span) 柵格的佔位格數,可選值爲0~24的整數,爲 0 時,至關於display:none * @method $this order(Number $order) 柵格的順序,在flex佈局模式下有效 * @method $this offset(Number $offset) 柵格左側的間隔格數,間隔內不能夠有柵格 * @method $this push(Number $push) 柵格向右移動格數 * @method $this pull(Number $pull) 柵格向左移動格數 * @method $this labelWidth(Number $labelWidth) 表單域標籤的的寬度,默認150px * @method $this className(String $className) 自定義的class名稱 * @method $this xs(Number|Col $span) <768px 響應式柵格,可爲柵格數或一個包含其餘屬性的對象 * @method $this sm(Number|Col $span) ≥768px 響應式柵格,可爲柵格數或一個包含其餘屬性的對象 * @method $this md(Number|Col $span) ≥992px 響應式柵格,可爲柵格數或一個包含其餘屬性的對象 * @method $this lg(Number|Col $span) ≥1200px 響應式柵格,可爲柵格數或一個包含其餘屬性的對象
參考: view col柵格佈局微信
Col
類,默認爲24namespace \FormBuilder\Form
cookie
方法 返回值 方法名(參數) 註釋 * @method $this type(String $type) 數據類型, 支持 city_area(省市區三級聯動), city (省市二級聯動), other (自定義) * @method $this disabled(Boolean $bool) 是否禁用選擇器 * @method $this clearable(Boolean $bool) 是否支持清除 * @method $this placeholder(String $placeholder) 佔位文本 * @method $this trigger(String $trigger) 次級菜單展開方式,可選值爲 click 或 hover * @method $this changeOnSelect(Boolean $bool) 當此項爲 true 時,點選每級菜單選項值都會發生變化, 默認爲 false * @method $this size(String $size) 輸入框大小,可選值爲large和small或者不填 * @method $this filterable(Boolean $bool) 是否支持搜索 * @method $this notFoundText(String $text) 當搜索列表爲空時顯示的內容 * @method $this transfer(Boolean $bool) /是否將彈層放置於 body 內,在 Tabs、帶有 fixed 的 Table 列內使用時,建議添加此屬性,它將不受父級樣式影響,從而達到更好的效果 * @method $this required($message = null, $trigger = 'change') 設爲必選 * @method $this data(array $data) 設置多級聯動可選項的數據 * 例如: { * "value":"北京市", "label":"北京市", "children":[{ * "value":"東城區", "label":"東城區" * }] * } * @method $this jsData($var) 設置data爲js變量 * @method string getType($var) 獲取組件類型
* @method $this size(String $size) 多選框組的尺寸,可選值爲 large、small、default 或者不設置 * @method $this required($message = null, $trigger = 'change') 設爲必選
* @method $this disabled(Boolean $bool) 是否禁用 * @method $this alpha(Boolean $bool) 是否支持透明度選擇, 默認爲false * @method $this hue(Boolean $bool) 是否支持色彩選擇, 默認爲true * @method $this recommend(Boolean $bool) 是否顯示推薦的顏色預設, 默認爲false * @method $this size(String $size) 尺寸,可選值爲large、small、default或者不設置 * @method $this format(String $format) 顏色的格式,可選值爲 hsl、hsv、hex、rgb String 開啓 alpha 時爲 rgb,其它爲 hex * @method $this required($message = null, $trigger = 'change') 設爲必選 * @method $this colors($colors) 自定義顏色預設
* @method $this type(String $type) 顯示類型,可選值爲 date、daterange、datetime、datetimerange、year、month * @method $this format(String $format) 展現的日期格式, 默認爲yyyy-MM-dd HH:mm:ss * @method $this placement(String $placement) 日期選擇器出現的位置,可選值爲top, top-start, top-end, bottom, bottom-start, bottom-end, left, left-start, left-end, right, right-start, right-end, 默認爲bottom-start * @method $this placeholder(String $placeholder) 佔位文本 * @method $this confirm(Boolean $bool) 是否顯示底部控制欄,開啓後,選擇完日期,選擇器不會主動關閉,需用戶確認後纔可關閉, 默認爲false * @method $this size(String $size) 尺寸,可選值爲large、small、default或者不設置 * @method $this disabled(Boolean $bool) 是否禁用選擇器 * @method $this clearable(Boolean $bool) 是否顯示清除按鈕 * @method $this readonly(Boolean $bool) 徹底只讀,開啓後不會彈出選擇器,只在沒有設置 open 屬性下生效 * @method $this editable(Boolean $bool) 文本框是否能夠輸入, 默認爲false * @method $this transfer(Boolean $bool) 是否將彈層放置於 body 內,在 Tabs、帶有 fixed 的 Table 列內使用時,建議添加此屬性,它將不受父級樣式影響,從而達到更好的效果, 默認爲false * @method $this splitPanels(Boolean $bool) 開啓後,左右面板不聯動,僅在 daterange 和 datetimerange 下可用。 * @method $this showWeekNumbers(Boolean $bool) 開啓後,能夠顯示星期數。
* @method $this type(String $type) frame類型, 有input, file, image, 默認爲input * @method $this src(String $src) iframe地址 * @method $this maxLength(int $length) value的最大數量, 默認無限制 * @method $this icon(String $icon) 打開彈出框的按鈕圖標 * @method $this height(String $height) 彈出框高度 * @method $this width(String $width) 彈出框寬度 * @method $this spin(Boolean $bool) 是否顯示加載動畫, 默認爲 true * @method $this frameTitle(String $title) 彈出框標題 * @method $this handleIcon(Boolean $bool) 操做按鈕的圖標, 設置爲false將不顯示, 設置爲true爲默認的預覽圖標, 類型爲file時默認爲false, image類型默認爲true * @method $this allowRemove(Boolean $bool) 是否可刪除, 設置爲false是不顯示刪除按鈕
* @method $this max(float $max) 最大值 * @method $this min(float $min) 最小值 * @method $this step(float $step) 每次改變的步伐,能夠是小數 * @method $this size(String $size) 輸入框尺寸,可選值爲large、small、default或者不填 * @method $this disabled(Boolean $bool) 設置禁用狀態,默認爲false * @method $this placeholder(String $placeholder) 佔位文本 * @method $this readonly(Boolean $bool) 是否設置爲只讀,默認爲false * @method $this editable(Boolean $bool) 是否可編輯,默認爲true * @method $this precision(int $precision) 數值精度
其餘type: text類型
Form::text
,password類型Form::password
,textarea類型Form::textarea
,url類型Form::url
,email類型Form::email
,date類型Form::idate
app
* @method $this type(String $type) 輸入框類型,可選值爲 text、password、textarea、url、email、date; * @method $this size(String $size) 輸入框尺寸,可選值爲large、small、default或者不設置; * @method $this placeholder(String $placeholder) 佔位文本 * @method $this clearable(Boolean $bool) 是否顯示清空按鈕, 默認爲false * @method $this disabled(Boolean $bool) 設置輸入框爲禁用狀態, 默認爲false * @method $this readonly(Boolean $bool) 設置輸入框爲只讀, 默認爲false * @method $this maxlength(int $length) 最大輸入長度 * @method $this icon(String $icon) 輸入框尾部圖標,僅在 text 類型下有效 * @method $this rows(int $rows) 文本域默認行數,僅在 textarea 類型下有效, 默認爲2 * @method $this number(Boolean $bool) 將用戶的輸入轉換爲 Number 類型, 默認爲false * @method $this autofocus(Boolean $bool) 自動獲取焦點, 默認爲false * @method $this autocomplete(Boolean $bool) 原生的自動完成功能, 默認爲false * @method $this spellcheck(Boolean $bool) 原生的 spellcheck 屬性, 默認爲false * @method $this wrap(String $warp) 原生的 wrap 屬性,可選值爲 hard 和 soft, 默認爲soft * @method $this autoSize($minRows, $maxRows) 自適應內容高度,僅在 textarea 類型下有效
* @method $this size(String $size) 單選框的尺寸,可選值爲 large、small、default 或者不設置 * @method $this vertical(Boolean $bool) 是否垂直排列,按鈕樣式下無效 * @method $this button() 使用按鈕樣式 * @method $this required($message = null, $trigger = 'change') 設爲必選
* @method $this count(int $star) star 總數, 默認爲 5 * @method $this allowHalf(Boolean $bool) 是否容許半選, 默認爲 false * @method $this disabled(Boolean $bool) 是否只讀,沒法進行交互, 默認爲 * @method $this showText(Boolean $bool) 是否顯示提示文字, 默認爲 false * @method $this clearable(Boolean $bool) 是否能夠取消選擇, 默認爲 false
* @method $this multiple(Boolean $bool) 是否支持多選, 默認爲false * @method $this disabled(Boolean $bool) 是否禁用, 默認爲false * @method $this clearable(Boolean $bool) 是否能夠清空選項,只在單選時有效, 默認爲false * @method $this filterable(Boolean $bool) 是否支持搜索, 默認爲false * @method $this size(String $size) 選擇框大小,可選值爲large、small、default或者不填 * @method $this placeholder(String $placeholder) 佔位文本 * @method $this transfer(String $transfer) 是否將彈層放置於 body 內,在 Tabs、帶有 fixed 的 Table 列內使用時,建議添加此屬性,它將不受父級樣式影響,從而達到更好的效果, 默認爲false * @method $this placement(String $placement) 彈窗的展開方向,可選值爲 bottom 和 top, 默認爲bottom * @method $this notFoundText(String $text) 當下拉列表爲空時顯示的內容, 默認爲 無匹配數據 * @method $this required($message = null, $trigger = 'change') 設爲必選
* @method $this min(float $min) 最小值, 默認 0 * @method $this max(float $max) 最大值, 默認 100 * @method $this step(float $step) 步長,取值建議能被(max - min)整除, 默認 1 * @method $this disabled(Boolean $bool) 是否禁用滑塊, 默認 false * @method $this range(Boolean $bool) 是否開啓雙滑塊模式, 默認 * @method $this showInput(Boolean $bool) 是否顯示數字輸入框,僅在單滑塊模式下有效, 默認 false * @method $this showStops(Boolean $bool) 是否顯示間斷點,建議在 step 不密集時使用, 默認 false * @method $this showTip(String $tip) 提示的顯示控制,可選值爲 hover(懸停,默認)、always(老是可見)、never(不可見) * @method $this inputSize(String $size) 數字輸入框的尺寸,可選值爲large、small、default或者不填,僅在開啓 show-input 時有效
* @method $this size(String $size) 開關的尺寸,可選值爲large、small、default或者不寫。建議開關若是使用了2個漢字的文字,使用 large。 * @method $this disabled(Boolean $bool) 禁用開關, 默認爲false * @method $this trueValue(String $value) 選中時的值,默認爲1 * @method $this falseValue(String $value) 沒有選中時的值,默認爲0 * @method $this openStr(String $open) 自定義顯示打開時的內容 * @method $this closeStr(String $close) 自定義顯示關閉時的內容
* @method $this type(String $type) 顯示類型,可選值爲 time、timerange * @method $this format(String $format) 展現的時間格式, 默認爲HH:mm:ss * @method $this placement(String $placement) 時間選擇器出現的位置,可選值爲top, top-start, top-end, bottom, bottom-start, bottom-end, left, left-start, left-end, right, right-start, right-end, 默認爲bottom-start * @method $this placeholder(String $placeholder) 佔位文本 * @method $this confirm(Boolean $bool) 是否顯示底部控制欄, 默認爲false * @method $this size(String $size) 尺寸,可選值爲large、small、default或者不設置 * @method $this disabled(Boolean $bool) 是否禁用選擇器 * @method $this clearable(Boolean $bool) 是否顯示清除按鈕 * @method $this readonly(Boolean $bool) 徹底只讀,開啓後不會彈出選擇器,只在沒有設置 open 屬性下生效 * @method $this editable(Boolean $bool) 文本框是否能夠輸入, 默認爲false * @method $this transfer(Boolean $bool) 是否將彈層放置於 body 內,在 Tabs、帶有 fixed 的 Table 列內使用時,建議添加此屬性,它將不受父級樣式影響,從而達到更好的效果, 默認爲false * @method $this steps($h, $i = 0, $s = 0) 下拉列表的時間間隔,數組的三項分別對應小時、分鐘、秒, 例如設置爲 [1, 15] 時,分鐘會顯示:00、1五、30、45。
* @method $this uploadType(String $uploadType) 上傳文件類型,可選值爲 image(圖片上傳),file(文件上傳) * @method $this action(String $action) 上傳的地址 * @method $this multiple(Boolean $bool) 是否支持多選文件 * @method $this name(String $name) 上傳的文件字段名 * @method $this accept(String $accept) 接受上傳的文件類型 * @method $this maxSize(int $size) 文件大小限制,單位 kb * @method $this withCredentials(Boolean $bool) 支持發送 cookie 憑證信息, 默認爲false * @method $this maxLength(Int $length) 最大上傳文件數, 0爲無限 * @method $this headers(array $headers) 設置上傳的請求頭部 * @method $this format(array $format) 支持的文件類型,與 accept 不一樣的是,format 是識別文件的後綴名,accept 爲 input 標籤原生的 accept 屬性,會在選擇文件時過濾,能夠二者結合使用 * @method $this data(array $data) 上傳時附帶的額外參數 * @method $this required($message = null, $trigger = 'change') 設爲必選
type=selected
而且multiple=false
,值爲String或Number類型* @method $this type(String $type) 類型,可選值爲 checked、selected * @method $this multiple(Boolean $bool) 是否支持多選,當`type=selected`而且`multiple=false`,默認爲false,值爲String或Number類型,其餘狀況爲Array類型 * @method $this showCheckbox(Boolean $bool) 是否顯示多選框,默認爲false * @method $this emptyText(String $emptyText) 沒有數據時的提示,默認爲'暫無數據' * @method $this data(array $treeData) 設置可選的data,**id必須惟一** * @method $this jsData($var) 設置data爲js變量
* @method $this id(String $id) Id,必須惟一 * @method $this title(String $title) 標題 * @method $this expand(Boolean $bool) 是否展開直子節點,默認爲false * @method $this disabled(Boolean $bool) 禁掉響應,默認爲false * @method $this disableCheckbox(Boolean $bool) 禁掉 checkbox * @method $this selected(Boolean $bool) 是否選中子節點 * @method $this checked(Boolean $bool) 是否勾選(若是勾選,子節點也會所有勾選) * @method $this children(array $children) 批量設置子集 * @method $this child(TreeData $child) 設置子集