# Former的使用
[Former框架地址](https://github.com/formers/former)
## 完整的一個例子
**指定使用的框架**
`Former::framework('TwitterBootstrap3');`
~~~
Former::horizontal_open() // 開局用什么布局,什么方法
->id('MyForm') // 指定表單的id
->rules(['name' => 'required']) //指定驗證規則
->action('http://1222') // 指定提交地址
->method('POST'); // 指定提交方式
Former::lg_text('name') // 指定大小,有 lg,md,sm,xs
->class('myclass') // 替換類(原有的會被干掉)
->addClass('song') // 增加類
->id('bg') // 指定id
->label('Full name') //指定標簽名
->value('Joseph') // 指定value
->required() // 必填,須要支持html5
->placeholder() // 提示信息
->help('請輸入你的名字'); //類似的有inlineHelp,blockHelp,data_placeholder
Former::textarea('comments') // 指定名字
->rows(10) // 指定行
->columns(20)
->autofocus();
Former::actions()
->large_primary_submit('提交')
->large_inverse_reset('重置');
Former::close(); // 結束表單
~~~
* * * * *
## 標準元素
**1. 隱藏輸入框**
`Former::hidden('name')->value(1)`
**2. 普通輸入框**
`Former::text('foo')->label('My field')`
**3. 普通文本框**
`Former::textarea('foo')->value('我的')`
**4. 下拉選擇列表**
options()第一個參數是填充下拉列表鍵值對,第二個參數是默認選擇的項目
`Former::select('foo')->options(['1' => '第一個','2'=>'第二個','3'=>'第三個'],2);`
等價于
`Former::select('foo')->options(['1' => '第一個','2'=>'第二個','3'=>'第三個'])->select('2');`
**5. 多選下拉框**
用法和下拉選擇列表基本一致
`Former::multiselect('foo[]')->options(['1' => '第一個','2'=>'第二個','3'=>'第三個'])`
**6. 單選框**
已選擇
`Former::checkbox('foo')->check();`
未選擇
`Former::checkbox('foo');`
**7. 圓點選擇框**
`Former::radio('foo')->check()`
* * * * *
## 一些方法
**1. 強制賦值(忽略populate()的自動賦值)**
**2. 下拉選擇框提示**
`Former::select('foo')->placeholder('Select one option...')->options(['1' => '第一個','2'=>'第二個','3'=>'第三個'])`
**3. 為輸入框添加頭尾圖標**
添加尾巴圖標
`Former::text('foo')->append('bar')`
添加頭圖標
`Former::text('foo')->prepend('bar')`
也可以添加多個
`Former::text('foo')->prepend('@', '$')`
`4. 為輸入框所在的組添加類`
`Former::text('foo')->addGroupClass('bar')`
**5. 自動填充表單**
會自動根據字段名填充表單 'name' with the value 'value
`Former::populate( array('name' => 'value') )`
* 也可以使用模型
* `Former::populate( Client::find(2) )`
* 比如一些關聯的模型,可以指定數據字段填充
`Former::populateField('client', $project->client->name)`
* 或是指定深度
`Former::text('customer.name.address')`
* 面對這些有深度的字段我們也可以重命名
`Former::text('comment.title')->name('title')`
* 也可以直接查詢數據庫填充下拉列表
第一個參數是模型
第二個參數是options
第三個參數是option對應的值
`Former::select('負責人')->fromQuery(App\Models\User::all(), 'name', 'id')`
**6. 設置狀態**
`Former::text('name')->state('error')`
## 文件上傳
主要的方法有accept()和max()
**1. 判斷類型**
`Former::files('avatar')->accept('image')`
`Former::files('avatar')->accept('gif', 'jpg')`
`Former::files('avatar')->accept('image/jpeg', 'image/png')`
**2. 判斷大小,指定單位**
`Former::file('foo')->max(2, 'MB')`
`Former::file('foo')->max(400, 'Kb')`
`Former::file('foo')->max(1, 'TB')`
## 復選框和單選
**1. 創建一個單選框**
`Former::checkbox('單選')`
**2. 創建一個帶文字的單選框**
~~~
Former::checkbox('單選帶文字')
->text('YO CHECK THIS OUT')
->check()
~~~
**3. 創建多個框 **
~~~
Former::checkboxes('checkme')
->checkboxes('第一個', '第二個', '第三個', '第四個')
~~~
**4. 創建內聯的多個框**
~~~
Former::checkboxes('checkme')
->checkboxes('第一個', '第二個', '第三個', '第四個')->inline()
~~~
**5. 創建只能單選的圓點**
`Former::stacked_radios('foo')->radios('第一', '第二')`
**6. 創建嵌套的多選框**
其中checkboxes叫level,那么他的子選框就叫level_1 其中0表示父,true表示選了
~~~
Former::checkboxes('level')
->checkboxes(0, 1, 2)
->check(array('level_0' => true, 'level_1' => false, 'level_2' => true))
~~~
有時候我們需要為選框添加屬性時,那么可以這樣
~~~
Former::radios('radio')
->radios(array(
'選框1' => array('name' => 'Jason1', 'value' => 'bar', 'class' => 'bar'),
'選框2' => array('name' => 'Jason2', 'value' => 'bat', 'class' => 'gag'),
))
~~~