# 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'),
))
~~~