表单的创建
- 在Yii中主要通过 yii\widgets\ActiveForm类来创建表单
- ActiveForm::begin()不仅创建了一个表单实例,同时也标志着表单的开始
- 放在 ActiveForm::begin()和ActiveForm::end()之间的所有内容都被包裹在html的form标签中
- 中间是通过调用 ActiveForm::field()方法来创建一个ActiveForm实例,这个实例会创建表单元素与元素的标签,以及对应的js验证
- ActiveField有一个对应的模型和属性,- input输入框的- name属性会自动的根据属性名来创建,同时,还会用属性的验证规则来验证用户输入的数据
e.g.
| 1 | $form = ActiveForm::begin(); | 
解析后的标签为:
| 1 | <form id="w0" action="/xx/xx/xx" method="post"> | 
还会自动添加 js 验证,代码如下:
| 1 | jQuery('#contactform-name').yiiActiveForm([{ | 
ActiveField 对象的使用
参考类参考手册
yii\widgets\ActiveField中的方法
自定义表单action链接和method
| 1 | $form = ActiveForm::begin(['action'=>['test/getpost'], 'method'=>'post',]); | 
文本输入框
| 1 | = $form->field($model, 'password')->textInput(); | 
限制输入长度
| 1 | = $form->field($model, 'username')->textInput(['maxlength'=>20]); | 
关闭输入自动完成功能
| 1 | = $form->field($model, 'username')->textInput(['autocomplete'=>'off']); | 
输入框只读
| 1 | = $form->field($model, 'username')->textInput(['readonly'=>true]); | 
密码输入框
| 1 | = $form->field($model, 'password')->passwordInput(); | 
单选框
| 1 | = $form->field($model, 'sex')->radioList(['1'=>'男', '0'=>'女']); | 
复选框
| 1 | = $form->field($model, 'hobby')->checkboxList(['0'=>'篮球','1'=>'足球','2'=>'羽毛球','3'=>'乒乓球']); | 
下拉框
| 1 | = $form->field($model, 'edu')->dropDownList(['1'=>'大学','2'=>'高中','3'=>'初中'], ['prompt'=>'请选择']); | 
隐藏域
| 1 | = $form->field($model, 'userid')->hiddenInput(['value'=>3]); | 
文本域
| 1 | = $form->field($model, 'info')->textarea(['rows'=>3]); | 
文件上传
| 1 | = $form->field($model, 'file')->fileInput(); | 
提示文字
| 1 | = $form->field($model, 'username')->textInput()->hint('Please enter your name'); | 
设置文字样式
| 1 | = $form->field($model, 'username')->textInput()->hint('Please enter your name', ['style'=>'color:red;']); | 
html5的邮箱输入框
| 1 | = $form->field($model, 'email')->input('email'); | 
自定义输入框的显示标签名
| 1 | = $form->field($model, 'name')->label('姓名'); | 
额外标签的处理,即与模型对象没有关系的额外 HTML 标签
e.g.
submit,button,p等
使用 yii\helpers\Html 帮助类中的方法来添加到表单中
纯文本 :
| 1 | = '<p class="username">'.$user->name.'</p>' | 
Html 帮助类
| 1 | = Html::tag('p',Html::encode($user->name),['class'=>'username']) | 
提交按钮
| 1 | = Html::submitButton('提交', ['class'=>'btn btn-primary', 'name' =>'submit-button']); | 
重置按钮
| 1 | = Html::resetButton('重置', ['class'=>'btn btn-primary','name' =>'submit-button']); | 
块儿赋值
- input中的- name,实际是以对象名来命名的一个数组,数组的键对应模型的属性 (e.g.- name="ContactForm[name]")
- model执行- load()方法,就是对每个属性执行这样一句赋值:- $model->name = isset($ContactForm['name']) ? $ContactForm[name] : null;
- 块赋值就是用这一句代码将用户所有的输入数据填充到模型中去
dropDownList 的高级用法
| 1 | = $form->field($model, 'status')->dropDownList($allStatus,['options' => [$needSelected => ['selected' => 'selected']],['prompt'=>'请选择状态']) | 
- $allStatus是一个- [1=>'已发布']形式的关联数组
- $needSelected为需要默认选中的值,其值满足- $allStatus中- key值中的一个
 
        